Firebase Storage的getDownloadURL方法的目的是什么?

4
根据这些文档,我了解到一旦我们在存储中有了Firebase路径,我们就可以通过调用此路径上的refgetDownloadUrl()来获取下载URL。我的问题是所有的文档都建议先获取下载URL,然后基于这些图像下载文件数据,但我们能否将此下载URL保存在我们的实时数据库中,以便我们不必每次调用getDownloadUrl()

当前文件上传和下载工作流程 ->

上传:

 1. upload file to storage in specific path.
 2. store path in realtime DB to persist for future downloading purposes

下载

 1. get object from realtime DB and retrieve storage path
 2. get storage object
 3. get url from getDownloadUrl() on that object
 4. download data from url

更好的上传/下载工作流 ->

上传:

 1. upload file to storage in specific path.
 2. get download url from storage object 
 3. store download path in realtime DB to persist for future downloading purposes

下载

 1. get object from realtime DB 
 2. get download url stored in object
 3. download data from download url

getDownloadUrl() 在底层做了什么,给定的url是否是静态的?


1
我认为问题在于实际的下载URL可能会动态变化。因此,你不应该将其持久化。根据文档,每次都应该调用getDownloadUrl() - paulsm4
这是有道理的。这主要是因为Firebase确定最接近客户端的CDN并从那里提供服务吗? - Badi8beach
1个回答

3
下载链接应该持久化保存。客户端每次调用都是浪费时间。这在Firebase示例代码中得到了一致的说明。

2
问题还涉及到底层的运作方式以及URL是否静态,这正是我想知道但在文档中没有找到完整答案的地方。下载URL的一个好处似乎是可以被撤销。然而,虽然我有一些猜测,但我认为为什么需要下载URL并不明显。您能解释一下为什么客户端不能直接从Google Cloud Storage请求路径吗?另外,一旦获得了下载URL,权限就“失效”了,URL实际上是公开的,因此任何具有URL的用户都可以查看文件。是这样吗? - jon_wu
2
沿着类似的思路,是否应该始终保留值?如果URL允许任何人访问文件,那么如果您在数据库中有一个文档,并且其中包含一个相关图像存储,但是该文档与2个不同角色的用户共享。其中1个角色被允许查看图像,而另一个角色仅被允许查看元数据。在这种情况下,如果您想要单个文档以提高效率和降低成本,您是否只想在数据库中保留路径,以便在用户调用“getDownloadURL”时,可以在存储级别上确定查看图像的权限? - jon_wu

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