javascript - 如何在Firebase存储触发功能中获取公共(public)下载链接: "onFinalize"?

标签 javascript firebase google-cloud-platform google-cloud-functions firebase-storage

我正在编写一个firebase云函数,它将最近上传的文件的下载链接记录到实时数据库:

exports.recordImage = functions.storage.object().onFinalize((object) => {

});

“object”使我可以访问两个变量“selfLink”和“mediaLink”,但是当在浏览器中输入它们时,它们都会返回以下内容:

Anonymous caller does not have storage.objects.get access to ... {filename}

因此,它们不是公共(public)链接。如何在此触发函数中获取公共(public)下载链接?

最佳答案

您必须使用异步 getSignedUrl() 方法,请参阅 Cloud Storage Node.js 库的文档:https://cloud.google.com/nodejs/docs/reference/storage/2.0.x/File#getSignedUrl .

所以下面的代码应该可以解决问题:

.....
const defaultStorage = admin.storage();
.....

exports.recordImage = functions.storage.object().onFinalize(object => {    
  const bucket = defaultStorage.bucket();
  const file = bucket.file(object.name);

  const options = {
    action: 'read',
    expires: '03-17-2025'
  };

  // Get a signed URL for the file
  return file
    .getSignedUrl(options)
    .then(results => {
      const url = results[0];

      console.log(`The signed url for ${filename} is ${url}.`);
      return true;
    })

});

请注意,为了使用 getSignedUrl() 方法,您需要使用专用服务帐户的凭据初始化 Admin SDK,请参阅此 SO 问题与解答 firebase function get download url after successfully save image to firebase cloud storage .

关于javascript - 如何在Firebase存储触发功能中获取公共(public)下载链接: "onFinalize"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53189911/

相关文章:

javascript - 使用 javascript 将产品数据从 Firestore 加载到网页

python - Google Cloud SQL - 我可以使用 SQLAlchemy 直接访问数据库吗 - 不在本地

docker - 如何使用 docker-compose 将容器部署到谷歌云?

Javascript 循环代码没有显示我想要的输出

Firebase 应用程序分发 - iOS - 会计

javascript - mongo.db 更新可能有值或没有值的日期字段

mobile - 使用手机数据 (3g/4g) 时无法访问 Firebase 服务器

python - 部署到 Google App Engine 时出现 "No module named cloud"

javascript - 在 Rails 4 App 上通过相对路径调用 Slider Revolution 资源

javascript - 如何使用socket.io请求实现类似jQuery的回调?