firebase - 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 的新手,我不敢相信这是设计使然。
解决方案
您是对的:以前通过 Firebase SDK 将文件上传到 Cloud Storage 后会自动确定下载 URL。
这在几年前发生了变化,需要显式调用来生成下载 URL。据我所知,从那时起,就再也没有办法在单个 API 调用中获取下载 URL 和元数据了。
推荐阅读
- ios - 检查 CBPeripheralManager.authorizationStatus() ,因为它已被弃用
- android - 重启或BOOT并取消特定日期的通知后如何处理AlarmManager?
- android - 从 android 向其他 android 设备发送通知
- asp.net - 如何在上传前验证 ajax 工具包 AsyncFileUpload 控制文件大小和扩展名
- c# - 具有复杂对象的 ML.NET LoadFromEnumerable
- r - 如何在 ggplot 中添加注释
- xcode - APP启动错误:服务无法初始化:18E226:xpcproxy + 11291
- python - python中的记录器模块不会创建多个文件
- javascript - Angular 6:如何通过检查属性的条件来更新本地存储中的所有属性值?
- javascript - 异步需要 AsyncTestZoneSpec - Angular