首页 > 解决方案 > Firebase getDownloadURL() 和 getMetadata() 多余地发出相同的 http 请求

问题描述

我正在使用 Firebase Storage Web API 来显示我上传到存储桶的几个文件的下载链接。

为了获取下载 url,我调用getDownloadURL()了对Google Cloud Storage Object的引用。这让我得到了网址,这很好。我用它做一个下载链接。

除此之外,我还调用getMetadata()相同的参考对象来获取我想在下载链接旁边显示的文件的大小。这也有效。

我的问题是,在查看网络流量时,我看到发出了两个相同的 http 请求。显然,上面的 API 调用发出完全相同的 http 请求,这对我来说似乎是在浪费网络资源。

http 响应如下所示:

bucket: "xxx.appspot.com"
contentDisposition: "inline; filename*=utf-8''file.zip"
contentEncoding: "identity"
contentType: "application/zip"
crc32c: "xxx"
downloadTokens: "xxx"
etag: "xxx"
generation: "123"
md5Hash: "xxx"
metageneration: "1"
name: "file.zip"
size: "71192686"
storageClass: "STANDARD"
timeCreated: "2021-01-29T11:00:34.110Z"
updated: "2021-01-29T11:00:34.110Z"

就像我说的。我得到了这个呼叫响应getDownloadURL()和第二次呼叫getMetadata().

查看文档,我发现曾经可以直接从元数据中获取下载 url。但是属性downloadURLs已被弃用。

我的问题:是否可以在不发出两次相同的 api 调用的情况下获取文件 url 和文件的大小?我是 firebase 的新手,我不敢相信这是设计使然。

标签: firebasefirebase-storage

解决方案


您是对的:以前通过 Firebase SDK 将文件上传到 Cloud Storage 后会自动确定下载 URL。

这在几年前发生了变化,需要显式调用来生成下载 URL。据我所知,从那时起,就再也没有办法在单个 API 调用中获取下载 URL 和元数据了。


推荐阅读