Не удается установить заголовок максимального возраста 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'}); 

будут.

Другие вопросы по тегам