You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Storage存储gzip文件自动解压及Cache-Control配置不生效问题

问题1:Cache-Control元数据为空的原因

你把Cache-Control配置放错了层级,Firebase Admin SDK依赖的@google-cloud/storage库中,标准HTTP缓存头属于顶层配置项,不需要放到metadata子对象中,metadata字段仅用于存储自定义的非标准元数据,所以你之前的写法不会被SDK识别,导致最终元数据为空。

问题2:下载始终返回明文文本的原因

这是Google Cloud Storage的默认行为:当客户端请求没有携带Accept-Encoding: gzip请求头时,GCS会自动对设置了Content-Encoding: gzip的对象做在线解压,直接返回解压后的明文内容,存储桶中实际保存的仍然是gzip压缩后的文件,没有被修改。
如果需要下载获取压缩后的二进制内容,请求时必须主动在请求头中添加Accept-Encoding: gzip。

修正后的上传代码

const admin = await import("firebase-admin");
const bucket = admin.storage().bucket();
const file = bucket.file(path);
await file.save(JSON.stringify(jsonArray), {
  gzip: true,
  contentType: 'application/json',
  // Cache-Control直接放在顶层配置,不要放到metadata里
  cacheControl: 'no-transform',
  // 有自定义元数据时才放到metadata对象中
  metadata: {}
})

验证方法

  • 上传完成后可在GCS控制台查看对象元数据,确认Cache-Control已经正确显示为no-transform
  • 验证存储的是压缩文件:在控制台直接下载原始对象,查看本地文件大小和压缩前的JSON大小对比即可确认
  • 验证压缩下载:Postman请求时在Headers栏添加Accept-Encoding: gzip,即可得到gzip压缩后的二进制响应

内容的提问来源于stack exchange,提问作者bigbang489

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 03:06:00