无法使用 Firebase Admin 从 Node.js 设置 Google 存储对象上的元数据

ari*_*xis 6 google-cloud-storage firebase firebase-storage

我正在编写一个 Firebase 应用程序,我需要在运行 Node.js 的后端进行一些更改

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  storageBucket: config.get("firebase.storage")
});
Run Code Online (Sandbox Code Playgroud)

我从初始化管理中获取存储桶,并且能够从该文件中查看现有的元数据。设置它不起作用:

const myfile = {URL: "/users/1/demo.png"}; //this file exists

const bucket = admin.storage().bucket();
const [metadata] = await bucket.file(redeemable.URL).getMetadata();
console.log(metadata); //this works
if (!metadata.metadata.whitelist) metadata.metadata.whitelist = {};

metadata.metadata.whitelist[req.user.userId] = true;

await bucket.file(myfile.URL).setMetadata(metadata);
Run Code Online (Sandbox Code Playgroud)

firebase管理员不应该有访问权限吗?我也没有收到任何错误。

dwe*_*lle 4

正如OP在评论中指出的那样,metadata对象必须是类型{ metadata: Record<string, string> }。文档没有提到这一点,TypeScript 类型也没有帮助

编辑:文档确实提到了它(强调我的):

您可以在给定对象的元数据键中设置自定义键/值对,

但措辞很容易被忽略。

bucket
    .file("path/to/file")
    .setMetadata({
      metadata: {
        someKey: "someValue",
      },
    })
Run Code Online (Sandbox Code Playgroud)