getDownloadURL
在外部桶上我们有一个 Firebase/GCP 项目,我们希望使用 Node.js 中的
getDownloadURL
Firebase 存储功能 为不同项目中存储桶中的对象创建永久签名 URL。
具体来说,我们有一个资产存储桶,我们希望为其中的对象生成长期(永远)的 URL,但不公开该存储桶。资产存储桶为许多项目提供服务,我们希望所有这些项目都能够针对资产存储桶生成 URL(无需执行任何特殊操作)。
在 Firebase 函数中(或任何具有作为默认服务帐户运行的应用程序默认凭据的东西):
import { Storage, type Bucket, type File } from '@google-cloud/storage'
import { getDownloadURL } from 'firebase-admin/storage'
async function getURL (): Promise<string> {
const b: Bucket = new Storage().bucket("external-asset-bucket")
const f: File = b.file("/any-file")
const url = await getDownloadURL(o) // permission error
return url
}
当我们运行
getDownloadURL
时,我们收到以下错误:
“错误:权限被拒绝。请通过访问 Firebase 控制台中的存储选项卡为您的存储桶启用 Firebase 存储,并确保您有足够的权限来正确配置资源。”
该错误建议我们将存储桶添加到 Firebase 项目中。当我们尝试通过 Firebase 控制台添加存储桶时,我们可以创建或导入存储桶,但不清楚“导入”的含义(复制?跨项目移动存储桶?等),也不清楚它是否可以跨项目工作。我们找不到任何文档来说明它的作用或是否有帮助,但它似乎也与权限问题(期望通过 IAM 权限解决)没有必要/无关。
我们还发现了一些我们尝试过的建议:
该错误没有给出如何解决此问题的有用指示,没有关于需要哪些权限的明显文档,并且来自 Google/etc 的大多数信息都已过时或错误。
作为一种解决方法,我们还考虑使用长期 V2 签名 URL ,但文档明确指出要使其保持短暂,并且 V4 签名 URL 有任意 7 天的限制,但会出现
getDownloadURL
功能是在这里做的正确/理想的事情(如果有效的话)。
我们如何在 GCP 项目之外的存储桶中的对象上使用
getDownloadURL
?
相关:
当我们尝试通过 Firebase 控制台添加存储桶时,我们可以创建或导入存储桶,但不清楚“导入”的含义(复制?跨项目移动存储桶?等),也不清楚它是否可以跨项目工作。我们找不到任何文档来说明它的作用或是否有帮助
虽然没有正式的产品文档,但您正在寻找的参考资料是:
在控制台中,您可以将存储桶链接到 Firebase,如下所示: