Firebase调整图像扩展完成后如何获取缩略图的下载URL

4
最近推出的Firebase扩展程序“Image resize”在图片上传到存储桶后会生成缩略图。扩展完成后,我如何获取此缩略图的下载URL?
final StorageReference storageRef =
        FirebaseStorage.instance.ref().child(fileName);

    final StorageUploadTask uploadTask = storageRef.putFile(
      File(path),
    );

    final StorageTaskSnapshot downloadUrl = (await uploadTask.onComplete);

    final String url = (await downloadUrl.ref.getDownloadURL()); //This will give me the download url of file before resize

// ??How do I the download url of resized image that gets stored in fileName/thumbnails folder

1个回答

0

当您将图像文件上传到指定的云存储桶时,此扩展功能:

  1. 创建一个具有指定尺寸的调整大小后的图像。
  2. 将调整大小后的图像存储在与原始上传图像相同的存储桶中。
  3. 使用与原始上传图像相同的名称命名调整大小后的图像,但添加您指定的宽度和高度作为后缀。

例如,如果您在此处指定路径为thumbs,并上传一张图片到/images/original.jpg,则调整大小后的图像将存储在/images/thumbs/original_200x200.jpg

因此,您文件的URL将为-

 String name = url.substring(url.lastIndexOf("/")+1,url.indexOf("."));
 String urlStr = "thumbnails/"+name+"_"+width+"x"+height+url.substring(url.indexOf("."),url.length());
 storageRef.child(url.replace(name,urlStr)).getDownloadUrl()
     .addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
           // Got the download URL for 'users/me/profile.png'
     }})  

谢谢您的回复。不过,我没有看到“addOnSuccessListener”适用于getDownloadURL。 - Vinayakaram Nagarajan
4
谢谢。然而,这似乎不是获取downloadUrl的正确方法。有一个云函数会被触发用于创建缩略图,客户端代码不知道云函数何时完成。因此,当调用downloadURL = await ref.getDownloadURL()时,文件将不存在。需要在创建缩略图之后获取下载链接。猜想我们需要另一个云函数来实现这一点。 - Vinayakaram Nagarajan
1
正如Vinayakaram所指出的那样,这并没有在EXTENSION运行后给出URL。我也一直在寻找答案,但我能想到的唯一办法就是存储新的bucket位置(因为你可以知道),然后在客户端使用ref.getDownloadURL(),就像这里所指出的那样https://dev59.com/N1UL5IYBdhLWcg3wFEpR。但是,我认为这有点影响了首先拥有缩略图的意义。看起来确实需要另一个云函数(这使得扩展变得无意义)。 - Jason Simpson
5
由于无法获取调整大小后图像的公共URL,该扩展对于使用公共URL加载图像的任何人都是无用的。 - Keith Coughtrey
2
函数仍然没有用处...2020年4月 - luke cross
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接