Не удается установить заголовок максимального возраста Cache-Control с помощью google-cloud-node
У меня проблемы с установкой заголовка максимального возраста для управления кэшированием изображений в моем хранилище. Изображения на самом деле хранятся в хранилище Firebase, если это имеет какое-либо значение.
Я могу успешно загрузить изображение, получить файл объекта в ответе. Затем я устанавливаю заголовок max-age для файла cache-control 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), заголовок max-age элемента управления кэшированием устанавливается на 3600, что по умолчанию.
Как ни странно, если я захожу на общедоступный URL-адрес через http ( http://storage.googleapis.com/my-bucket-name.appspot.com/storageBucketName/imageName.png) заголовок max-age элемента управления кэшированием установлен на 31536000, как и ожидалось.
Как я могу установить этот заголовок для общедоступного URL-адреса, доступного через https? Спасибо!
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();
});
Если кому-то интересно - у меня не было пробела между запятой и следующим значением.
то есть.
ref.updateMetadata({cacheControl: 'public,max-age=3600'});
не будет работать,
в то время как:
ref.updateMetadata({cacheControl: 'public, max-age=3600'});
будут.