无法使用 Firebase 管理员在 Node.js 的 Google 存储对象上设置元数据
Posted
技术标签:
【中文标题】无法使用 Firebase 管理员在 Node.js 的 Google 存储对象上设置元数据【英文标题】:Cannot set metadata on a Google Storage Object from Node.js using Firebase Admin 【发布时间】: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 无能为力。 ***.com/help/mcve 很遗憾听到权威人士说您确定它有效并且 SO 无能为力。你能告诉我你需要什么确切的值吗?文件字符串?我永远无法制作一个简单的示例,因为它需要我无法发布的谷歌存储服务器的访问代码。没有其他任何东西丢失。但它在他们的 Node.js 官方文档中丢失,并且只提到了从 gsutil 工具设置元数据。我确实添加了更多代码以使其更清晰。 当您说console.log(metadata)
有效时,它究竟做了什么符合您的期望?您传递给 setMetadata 的对象到底是什么样的?让我们将这段代码简化为对 setMetadata 的一次调用,看看它是否收到了您期望的数据。
【参考方案1】:
正如 OP 在 cmets 中发现的那样,metadata
对象必须是 metadata: Record<string, string>
类型。 documentation 没有提到这一点,TypeScript 类型也没有帮助。
编辑:文档 do 实际上提到了它(强调我的):
您可以在给定对象的元数据键中设置自定义键/值对,
但措辞让人很容易错过。
bucket
.file("path/to/file")
.setMetadata(
metadata:
someKey: "someValue",
,
)
【讨论】:
以上是关于无法使用 Firebase 管理员在 Node.js 的 Google 存储对象上设置元数据的主要内容,如果未能解决你的问题,请参考以下文章
无法为 Firebase 中的 bigquery 链接启用谷歌分析
无法使用 firebase_messaging 在 iOS 上的 Flutter 应用中订阅主题