【问题标题】:File metadata is not getting updated in Firestore StorageFirestore 存储中的文件元数据未更新
【发布时间】:2020-01-29 23:01:04
【问题描述】:

我创建了一个云函数,它会在 Firebase 存储中的任何新文件上传时触发。一旦成功上传功能将更新其元数据,但即使使用“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 上记录其打印的“成功”消息。 “metageneration: '2'” 属性也得到了更新,这意味着它应该使用新值更新元数据,但它没有。

【问题讨论】:

    标签: javascript firebase google-cloud-functions firebase-storage firebase-admin


    【解决方案1】:

    问题在于如果你想设置自定义键/值对,它们必须在你传递给setMetadata()方法的对象的metadata键中,即metadata 对象在您的情况下。这在 node.js 的 API Reference Documentation 中进行了解释。

    所以以下将起作用:

    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;
        }
    });
    

    【讨论】:

    • 非常感谢,虽然后来我意识到我已经尝试过类似的方法来更新“元数据”属性,但是我没有使用“元数据”关键字作为对象名称,而是使用“自定义元数据”,这样实际上搞砸了我的一天:P.
    • .updateMetadata 用于 web w / customMetadata 作为自定义对象的键 firebase.google.com/docs/storage/web/file-metadata
    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    相关资源
    最近更新 更多