为什么异步函数 "getDownloadURL" 用于获取 Firebase 存储中的文件 URL

Why asynchronous function "getDownloadURL" are used to get file URLs in Firebase Storage

为了获取上传到云存储的文件的URL,我们必须编写如下代码。

import { getStorage, ref } from 'firebase/storage'

const storage = ref(getStorage(firebaseApp))
const url = await getDownloadURL(ref(storage, 'images/sample.jpg'))

为什么我们需要调用一个异步函数而不是从一开始就知道一个唯一文件的URL?
我想当您调用“getDownloadURL”时身份验证就完成了。
但是,如果需要认证,为什么不为文件发出一个唯一的URL,然后在调用URL时进行认证呢?

我假设您使用的是 Firebase for Web。其他平台应该也一样。

它似乎是异步的,因为它需要网络请求才能下载 URL,而且正如您所说,它也执行身份验证(通过存储规则)。

However, if authentication is necessary, why not issue a unique URL for the file, and then perform authentication when the URL is called?

我的假设:假设您调用了 1000 张图像,当它们要呈现时,由于用户未通过身份验证而失败。当然,这不是一个好的用户体验 - 最好在请求期间失败,这样你就可以向用户显示请求失败的一些反馈,可能通过使用警报、模态或类似的东西。

参考文献:

Why do we need to call an asynchronous function instead of knowing the URL of a unique file from the beginning?

这是因为下载URL是在服务器上生成的。此 URL 在数据成功上传到 Firebase 存储后立即可用。这是一个异步操作,因为将数据实际上传到服务器需要时间。根据连接速度和状态以及数据大小,完成上传可能需要几百毫秒到几秒不等。除此之外,URL 包含一个令牌,每当文件上传到 Cloud Storage 时都会自动创建该令牌。这是一个随机标记,这使得 URL 很难猜到。

这就是为什么您无法提前知道最终下载 URL 的原因。这与在实时数据库中推送 ID 或在 Firestore 中生成文档 ID 不同,这两种操作都在客户端上进行。