从Firebase存储中获取图片并将其显示给用户

从Firebase存储中获取图片并将其显示给用户,firebase,flutter,firebase-storage,Firebase,Flutter,Firebase Storage,如果我将Firebase存储的引用保存为字符串,如: 字符串引用=https://firebasestorage.googleapis.com/v0/b/something/o/bucket%2Fp%2FprofilePicture%2Fimage_picker_26.jpg?alt=media&token=something 这个参考点指向一张图片,我怎样才能从存储器中获取这个图片并将它显示给用户 我的想法是: Image.network(reference) 但我在互联网上读到,这是不安全

如果我将Firebase存储的引用保存为字符串,如:

字符串引用=https://firebasestorage.googleapis.com/v0/b/something/o/bucket%2Fp%2FprofilePicture%2Fimage_picker_26.jpg?alt=media&token=something
这个参考点指向一张图片,我怎样才能从存储器中获取这个图片并将它显示给用户

我的想法是:

Image.network(reference)
但我在互联网上读到,这是不安全的,我认为这并不是那么容易…在调用任何小部件来显示它之前,我应该有类似于:
FirebaseStorage.instance.refFromURL(url)

您有什么建议吗?

如果您想在上传后从存储中获取url,请执行以下操作:

FirebaseStorage storage = FirebaseStorage.instance;
Reference ref = storage.ref().child("folder");
UploadTask uploadTask = ref.putFile(image);
uploadTask.then((res) {
   res.ref.getDownloadURL();
});

要显示它,您可以使用
Image.network()

我知道问题在于该方法返回的URL是一个长期存在的URL。此方法不提供为下载URL配置过期日期的可能性。JS客户端SDK也是如此

但是,管理员SDK也可以使用,例如,请参见Node.js管理员SDK的方法

因此,您可以创建一个,通过传递文件引用调用它,并返回一个带有您选择的过期日期的signedURL


从您的Flitter应用程序中,您可以按说明调用此云函数。

为什么不安全?Image.network只是一个显示图片的小部件,因为它是一个长期存在的url,并且会创建一个漏洞,因为它就像在google drive中创建一个公共链接。不,我的意思是,我已经有了url,我想向用户显示它,但我在internet上读到“Image.network(url)”这不是一种安全的做法,因为它会将url暴露到internet上。