【问题标题】:Cannot set metadata on a Google Storage Object from Node.js using Firebase Admin无法使用 Firebase 管理员在 Node.js 的 Google 存储对象上设置元数据
【发布时间】:2019-05-28 12:24:22
【问题描述】:

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

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  storageBucket: config.get("firebase.storage")
});

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

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

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

【问题讨论】:

  • 这里缺少太多信息。究竟是什么行不通?有错误吗?这里我们看不到的所有变量的值是多少?请尝试对值进行硬编码,以便我们可以看到您打算做什么。
  • setMetadata 不起作用。存储桶和文件(唯一的变量)是正确的我可以看到并 console.log 文件的元数据但是当我设置它时,它没有。官方文档中也缺少它。没有错误
  • 元数据确实有效。如果没有看到您正在处理的所有确切值,Stack Overflow 无能为力。 stackoverflow.com/help/mcve
  • 很遗憾听到权威人士说您确定它有效并且 SO 无能为力。你能告诉我你需要什么确切的值吗?文件字符串?我永远无法制作一个简单的示例,因为它需要我无法发布的谷歌存储服务器的访问代码。没有其他任何东西丢失。但它在他们的 Node.js 官方文档中丢失,并且只提到了从 gsutil 工具设置元数据。我确实添加了更多代码以使其更清晰。
  • 当您说console.log(metadata) 有效时,它究竟做了什么符合您的期望?您传递给 setMetadata 的对象到底是什么样的?让我们将这段代码简化为对 setMetadata 的一次调用,看看它是否收到了您期望的数据。

标签: firebase google-cloud-storage firebase-storage


【解决方案1】:

正如 OP 在 cmets 中发现的那样,metadata 对象必须是 { metadata: Record<string, string> } 类型。 documentation 没有提到这一点,TypeScript 类型也没有帮助。

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

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

但措辞让人很容易错过。

bucket
    .file("path/to/file")
    .setMetadata({
      metadata: {
        someKey: "someValue",
      },
    })

【讨论】:

    猜你喜欢
    • 2020-05-09
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 2019-03-12
    • 1970-01-01
    • 2019-04-27
    相关资源
    最近更新 更多