Метаданные файла не обновляются в хранилище Firestore - PullRequest
1 голос
/ 30 сентября 2019

Я создал облачную функцию, которая запускается при любой новой загрузке файлов в Firebase Storage. После успешной загрузки функция обновит свои метаданные, но даже если установка новых метаданных с помощью setMetadata () не будет применена. Во время процесса ошибки нет, но при проверке обновленных метаданных новые не отображаются.

exports.onImageUpload = functions.storage.object().onFinalize(async (object) => {  
  const storageRef = admin.storage().bucket(object.bucket);

  var metadata = {
      'uploader': 'unknown'   
  }

  await storageRef.file(object.name).setMetadata(metadata).then(function(data) {
    console.log('Success');
    console.log(data);
    return;
  }).catch(function(error) {
    console.log(error);
    return ;
  });
  return;
}); 

Ошибки нет, и в журнале Cloud Function выводится сообщение «Success». Также обновлено свойство metageneration: '2', что означает, что оно должно было обновить метаданные с новыми значениями, но это не так.

1 Ответ

2 голосов
/ 30 сентября 2019

Проблема заключается в том, что если вы хотите установить пользовательские пары ключ / значение , они должны быть в metadata ключе объекта, который вы передаете методу setMetadata(), то есть metadata объект в вашем случае. Это объясняется в Справочной документации API для node.js.

Так что будет работать следующее:

exports.onImageUpload = functions.storage.object().onFinalize(async (object) => {
    const storageRef = admin.storage().bucket(object.bucket);

    var metadata = {
        metadata: {
            'uploader': 'unknown'
        }
    }

    try {
        const setFileMetadataResponse = await storageRef.file(object.name).setMetadata(metadata);
        console.log('Success');
        console.log(setFileMetadataResponse[0]);
        return null;
    } catch (error) {
        console.log(error);
        return null;
    }
});
...