我创建了一个云功能,该功能可在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;
});
没有错误,并在云功能上记录其打印“成功”消息。另外,“元生成:'2'”属性也已更新,这意味着它应该具有带有新值的更新后的元数据,但是没有。
问题来自以下事实:如果要设置自定义键/值对,它们必须位于传递给metadata
方法(即setMetadata()
对象)的对象的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;
}
});