当前位置: 首页 > 知识库问答 >
问题:

无法使用谷歌云节点设置缓存控制最大年龄头

敖淮晨
2023-03-14

我无法为存储桶中的图像设置缓存控制最大年龄标头。这些图像实际上存储在firebase存储桶中,如果这有什么区别的话。

我可以成功上传一个图像,并在响应中接收文件对象。然后,我将文件的缓存控制最大年龄头设置为31536000,如下所示:

const gcloud = require('google-cloud');
const gcs = gcloud.storage({credentials: myCredentials});
const storageBucket = gcs.bucket(myConfig);

storageBucket.upload('path/to/image', {
    public: true,
    destination: storageBucket.file('storageBucketName/imageName.png')
} , (err, file, apiResponse) => {
    file.setMetadata({
        cacheControl: 'public, max-age=31536000'
     });
});

当我访问公共url上的图像时(https://storage.googleapis.com/my-bucket-name.appspot.com/storageBucketName/imageName.png)cache control max age标头设置为3600,这是默认值。

奇怪的是,如果我通过超文本传输协议(http://storage.googleapis.com/my-bucket-name.appspot.com/storageBucketName/imageName.png)访问公共网址,缓存控制最大年龄头被设置为31536000,这是意料之中的。

我如何为https上的公共网址设置这个标题?谢谢!

共有2个答案

宋经赋
2023-03-14

如果有人感兴趣,我的问题是逗号和下一个值之间没有空格。

比如。

ref.updateMetadata({cacheControl: 'public,max-age=3600'}); 

行不通,

而:

ref.updateMetadata({cacheControl: 'public, max-age=3600'}); 

卫弘图
2023-03-14

在这里找到了答案:

https://github.com/GoogleCloudPlatform/google-cloud-node/issues/1087

所以对于你的代码

const gcloud = require('google-cloud');
const gcs = gcloud.storage({credentials: myCredentials});
const storageBucket = gcs.bucket(myConfig);

storageBucket.upload('path/to/image', {
    public: true,
    destination: storageBucket.file('storageBucketName/imageName.png')
    metadata: {
        cacheControl: 'public, max-age=14400'
    }

} , (err, file, apiResponse) => {
});

或者我是怎么做的:

const cf = bucket.file(fn);
fs.createReadStream(path.join(topDir, fn))
  .pipe(cf.createWriteStream({
    predefinedAcl: 'publicRead',
    metadata: {
      contentType: mime.lookup(fn) || 'application/octet-stream',
      cacheControl: 'public, max-age=315360000',
    },
    gzip: true
  }))
  .on('error', err => {
    logErr(err);
      resolve();
  })
  .on('finish', () => {
    resolve();
  });
 类似资料:
  • 背景: IIS 7 AspNet 3.5网络应用程序 Chrome开发工具列出了对web应用主页(aspx js css图像)的98个请求。在以下请求中,css/图像文件的状态代码为。没有缓存信息,浏览器每次都会询问服务器是否需要更新文件。OK. 在IIS 7中,我为缓存控制设置HTTP头,为“ressources”文件夹设置为6小时。在Chrome中,使用dev工具,我可以看到标题在响应中设置得

  • 我已将服务器响应配置为包含

  • 我正在尝试使用node。用于访问googleAPI的js客户端库(https://github.com/google/google-api-nodejs-client).我正在尝试使用谷歌云存储API插入bucket和object。我可以成功列出项目存储的存储桶。还可以从存储器中检索特定的存储桶。但无法插入桶或对象。 执行API调用的代码: 以下是日志中显示的内容: 任何指示什么是“必需的”,如何

  • 我正在向gcs写入一些字节,并希望使用谷歌提供的JSON API包装器,但有一个超时。目前我有: 有没有一种简单的方法可以向、或?

  • 我有一个谷歌云存储(GCS)桶标记为公共。我使用v4签名的URL将图像上传到这个公共桶。我可以通过HTTP头看到GCS缓存图像长达1小时。但是,当我上传相同图像的较新版本(具有相同的文件名)时,GCS不会使缓存无效,仍然为这些图像的较旧版本服务。当这些映像的较新版本上载到GCS时,如何确保缓存无效?必须使用v4签名的URL。

  • 我有一个Spring Boot(1.5.8)webapp,与其他几个Spring Boot服务,都部署到AWS。webapp模块部署到由弹性负载均衡器管理的两个EC2实例。整个系统是由库伯内特斯精心策划的。 我正试图设置会话cookie max age来解决一个问题,正如这里所建议的:成功身份验证后的Spring SAML无尽重定向循环 当我使用Docker Compose在本地机器上运行时,我所