使用Firebase Image Resize Extension时如何避免重新生成token
解决方案
方案1:直接配置扩展现有参数(无需修改代码)
你在安装/重新配置storage-resize-images扩展时,找到将元数据从原始文件复制到调整大小的文件的选项,勾选开启即可。最新版(v0.2.0及以上)的扩展中这个选项默认是关闭的,开启后除自定义元数据外,Firebase存储默认的firebaseStorageDownloadTokens字段也会被原样复制到新生成的缩略图中,无需再重新获取下载URL。
- 如果你已经安装过扩展,可以直接在Firebase控制台的「扩展」页面找到对应扩展,点击「重新配置」就能找到这个选项,修改后保存即可生效,不需要重新部署。
方案2:自定义扩展底层云函数逻辑(适合需要额外定制的场景)
如果勾选参数后仍不生效,或者你使用的是fork的修改版扩展,可以直接修改对应云函数的代码,在生成调整后图片的步骤中手动指定元数据的token:
首先在获取原始文件元数据的环节,提取原有token:
const originalMetadata = await originalFile.getMetadata(); const originalToken = originalMetadata.metadata?.firebaseStorageDownloadTokens || originalMetadata.firebaseStorageDownloadTokens;
然后在上传调整后图片时,把token写入新文件的元数据中:
await resizedFile.save(resizedImageBuffer, { metadata: { ...originalMetadata, firebaseStorageDownloadTokens: originalToken } });
注意如果你同时开启了删除原始文件的选项,要确保复制元数据的逻辑执行在原始文件删除之前,避免拿不到原始token。
补充说明:如果你的缩略图和原始文件存储路径不同,复制token后两个文件会共享同一个下载URL前缀,只要文件名正确就能直接用原token拼接访问,不需要重新调用
ref.getDownloadURL()接口。
内容的提问来源于stack exchange,提问作者tonnoz
相关产品推荐
相关产品推荐

