我在设置存储桶中图像的缓存控制max-age标头时遇到问题。这些图像实际上存储在一个firebase存储桶中,如果这有任何区别的话。
我可以成功上传图片,在响应中接收文件对象。然后我将文件的cache-control max-age标头设置为31536000,如:
substring
当我在公共网址(https://storage.googleapis.com/my-bucket-name.appspot.com/storageBucketName/imageName.png)访问图片时,缓存控制max-age标头设置为3600,这是默认设置。
奇怪的是,如果我通过 http (http://storage.googleapis.com/my-bucket-name.appspot.com/storageBucketName/imageName.png)访问公共网址,则缓存控制max-age标头会按预期设置为31536000。
如何通过https为公共网址设置此标头?谢谢!
答案 0 :(得分:2)
在这里找到答案:
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();
});
答案 1 :(得分:0)
如果有人感兴趣-我遇到的问题是逗号和下一个值之间没有空格。
即。
ref.updateMetadata({cacheControl: 'public,max-age=3600'});
不起作用,
同时:
ref.updateMetadata({cacheControl: 'public, max-age=3600'});
会。