一尘不染

从使用Cloud Functions for Firebase上传的文件中获取下载URL

node.js

将文件上传到具有Firebase功能的Firebase存储中后,我想获取文件的下载URL。

我有这个 :

...

return bucket
    .upload(fromFilePath, {destination: toFilePath})
    .then((err, file) => {

        // Get the download url of file

    });

目标文件有很多参数。甚至有一个叫mediaLink。但是,如果尝试访问此链接,则会出现此错误:

匿名用户没有storage.objects.get对对象的访问权限…

有人可以告诉我如何获取公共下载网址吗?

谢谢


阅读 231

收藏
2020-07-07

共1个答案

一尘不染

您需要通过@ google-cloud / storage
NPM模块使用getSignedURL生成签名URL

例:

const gcs = require('@google-cloud/storage')({keyFilename: 'service-account.json'});
// ...
const bucket = gcs.bucket(bucket);
const file = bucket.file(fileName);
return file.getSignedUrl({
  action: 'read',
  expires: '03-09-2491'
}).then(signedUrls => {
  // signedUrls[0] contains the file's public URL
});

您需要@google- cloud/storage使用服务帐户凭据进行初始化,因为应用程序默认凭据不足。

更新 :现在可以通过Firebase Admin SDK访问Cloud Storage
SDK,该软件充当 @ google-
cloud / storage
的包装。唯一的方法是:

  1. 通常通过第二个非默认实例,使用特殊服务帐户初始化SDK。
  2. 或者,在没有服务帐户的情况下,通过向默认的App Engine服务帐户授予“ signBlob”权限。
2020-07-07