将自定义数据添加到Firebase存储上传中?

twe*_*ypi 5 firebase google-cloud-functions firebase-storage

我正在将文件上传到Firebase存储,如下所示:

var storageRef = firebase.storage();
                var fileRef = storageRef.ref(file.name);
                fileRef.put(file)
                    .then(function (snapshot) {
                        console.log('Uploaded a blob or file!');
                        window.URL.revokeObjectURL(file.preview);
                    })
Run Code Online (Sandbox Code Playgroud)

上传后,我有一个firebase存储触发器:

export const processUploadedFile = functions.storage.object().onChange(event => {
}
Run Code Online (Sandbox Code Playgroud)

我想做的是在原始上传文件中上传一些其他信息,以便processUploadedFile知道如何处理(例如,提取文件,将其移动到特殊目录等)。

我试着像这样使用元数据:

        var newMetadata = {
            customMetadata: {
                "Test": "value"
            }
        }

fileRef.put(file, newMetadata)
Run Code Online (Sandbox Code Playgroud)

但是在云存储触发功能上,我不知道如何获取元数据,我这样注销了fileMetaData:

file.getMetadata().then((metaData)=>console.log(metaData))
Run Code Online (Sandbox Code Playgroud)

但是在其中的任何地方(或在返回未定义的fileMetaData [0] .metadata中)都没有看到我的元数据。

不确定如何实现此目标...

mar*_*922 6

我认为提供文件元信息将解决问题。这是参考。Firebase存储文件元数据。您可以使用customMetadata传递文件的自定义参数。例如 :

customMetadata: {
    'actionType': 'ACTION_CODE',
    'action': 'do something info'
}
Run Code Online (Sandbox Code Playgroud)

您可以使用存储触发器访问此元数据,并采取相应的措施。这是实现自动提取图像元数据的方法


fra*_*anc 5

我相信有些属性无法更改,因为它们不可写。但是,如果您确实想将自定义数据添加到 firebase 存储,则可以将自定义元数据设置为包含 String 属性的对象。例如:

 var myCustomMetadata = {
    customMetadata : {
     'file_name': 'this is the file name'
     }
   }
Run Code Online (Sandbox Code Playgroud)

在上述情况下,file_name是您要创建的自定义元数据。

在 Firebase 存储中创建对文件的引用后,您可以对该引用调用updateMetadata()方法。

例如:

使用 downloadUrl 获取对图像文件的引用:

 var myCustomMetadata = {
    customMetadata : {
     'file_name': 'this is the file name'
     }
   }
Run Code Online (Sandbox Code Playgroud)

使用参考更新元数据:

getRef.updateMetadata(myCustomMetadata).then(()=>{
    //do other things
  })
Run Code Online (Sandbox Code Playgroud)