繁体   English   中英

如何在使用 firebase 存储上传后获取调整大小的 downloadUrl(Web SDK + 调整图像扩展)

[英]How to get the resized downloadUrl after upload with firebase storage (Web SDK + Resize images extention)

使用Firebase Web SDK,我可以在上传文件后轻松获取downloadUrl

const task = firebase.ref().child('myFolder').put(file, metadata)
task.then(snapshot => {
 snapshot.ref.getDownloadURL()) 
}

但是我安装了调整大小的图像扩展,现在,我想尽快获得调整大小的 downloadUrl。 怎么做? 我没有找到任何关于它的解释......

扩展名根据您的配置方式确定性地确定新文件名。 您可以在扩展程序的源代码中查看如何确定名称的确切代码

当您安装扩展程序时,它会要求提供与原始路径相关的调整大小图像的路径。 那是新图像的路径(当然,相对于原始图像)。

除此之外, 文档声明它将以配置的宽度和高度为后缀。

使用与原始上传图像相同的名称命名调整大小的图像,但后缀为您指定的宽度和高度。

因此,如果您没有指定路径,而是指定了 200x200,然后将image.jpg上传到存储桶的根目录,则新名称将是: image_200x200.jpg ,位于存储桶的根目录。

如果您指定了路径resized ,并且您指定了 200x200 和上传的image2.jpg到存储桶的根目录,则新名称将是/resized/image2_200x200.jpg与源图像在同一存储桶中。

要下载 URL,一旦扩展 function 创建了新文件,您将需要在具有新名称的存储引用上调用getDownloadURL

如果你想等待,你可以用类似下面的代码来轮询:

function delay(t, v) {
  return new Promise(function(resolve) { 
    setTimeout(resolve.bind(null, v), t)
  });
}

function keepTrying(triesRemaining, storageRef) {
  if (triesRemaining < 0) {
    return Promise.reject('out of tries');
  }

  return storageRef.getDownloadURL().then((url) => {
    return url;
  }).catch((error) => {
    switch (error.code) {
      case 'storage/object-not-found':
        return delay(2000).then(() => {
          return keepTrying(triesRemaining - 1, storageRef)
        });
      default:
        console.log(error);
        return Promise.reject(error);
    }
  })
}

这就是上传后的调用方式:

const storageRef = firebase.storage().ref().child('image_200x200.jpg');
keepTrying(10, storageRef).then((url) => console.log(url));

firebase 调整大小扩展对我来说似乎毫无用处!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM