Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 了解Firebase存储令牌_Javascript_Firebase_Firebase Storage - Fatal编程技术网

Javascript 了解Firebase存储令牌

Javascript 了解Firebase存储令牌,javascript,firebase,firebase-storage,Javascript,Firebase,Firebase Storage,我试图了解代币在Firebase存储中是如何工作的 每当我的web应用程序将图像上载到FS时,它都会向其公共url添加一个标记。问题是,每当您将同一图像文件上载到web应用程序的另一部分时,您似乎不会获得另一个文件,而是已上载的文件url的不同标记,从而导致先前注册的图像显示出现403错误 有办法解决这个问题吗 例如: storageRef.put(picture.jpg); uploadTask.snapshot.downloadURL // returns something like h

我试图了解代币在Firebase存储中是如何工作的

每当我的web应用程序将图像上载到FS时,它都会向其公共url添加一个标记。问题是,每当您将同一图像文件上载到web应用程序的另一部分时,您似乎不会获得另一个文件,而是已上载的文件url的不同标记,从而导致先前注册的图像显示出现403错误

有办法解决这个问题吗

例如:

storageRef.put(picture.jpg);
uploadTask.snapshot.downloadURL 
// returns something like https://firebasestorage.googleapis.com/v0/b/<your-app>/o/picture.jpg?alt=media&token=09cb2927-4706-4e36-95ae-2515c68b0d6e
storageRef.put(picture.jpg);
uploadTask.snapshot.downloadURL
//返回类似于https://firebasestorage.googleapis.com/v0/b//o/picture.jpg?alt=media&token=09cb2927-4706-4e36-95ae-2515c68b0d6e
然后,该url将显示在img src中的某个位置

<img src="https://firebasestorage.googleapis.com/v0/b/<your-app>/o/picture.jpg?alt=media&token=09cb2927-4706-4e36-95ae-2515c68b0d6e">
/o/picture.jpg?alt=media&token=09cb2927-4706-4e36-95ae-2515c68b0d6e”>
如果用户重复此过程并在应用程序的另一部分上载相同的picture.jpg,而不是在Firebase存储中获取全新副本,则该文件将被以新令牌结尾的URL覆盖;例如12345

因此:

//新上传效果良好
//但是旧的上传由于错误的url而中断

令牌对于特定版本的上载是唯一的。如果您使用新内容覆盖文件,则将使用新的不可用url生成新令牌

因此,换句话说,令牌对于特定blob是唯一的——它们不是每个存储位置唯一的。我们这样做是为了提高安全性,以确保开发人员和最终用户不会意外地公开他们不打算公开的数据

但是,您可以使用我们的JSSDK将存储位置(“gs://mybucket/myfile.png”)转换为下载url。这样,您可以根据需要传递gs uri,并在将其放置到图像中后将其转换为完整url


请参阅:

有关公共文件上载的信息:如果您在firebase函数中上载文件,则需要调用
makePublic()
,以便在没有有效令牌的情况下访问引用对象。

使用图像的本地缓存这是一个web应用程序,即使文件相同,每个图像都需要自己的url。抱歉,我认为它是移动应用程序,因为我没有指出这一点。已编辑。你指的是什么类型的令牌?你能添加吗?通常为cl这使我们可以更有效地帮助您。“不可用的url”这有多安全?有人可以强行进入url吗?谢谢!
 <img src="https://...picture.jpg?alt=media&token=12345"> // New upload renders fine
 <img src="https://...picture.jpg?alt=media&token=09cb2927-4706..."> // But old upload breaks because of wrong url