Firebase Admin SDK 用于下载/检索 Google Cloud Storage 上的文件

问题描述 投票:0回答:2

我正在尝试下载一些已上传到 Google Cloud Storage(又名存储桶)的图像。我无法在任何

const storage
const bucket
上使用 .ref() 方法,因为它们是管理 SDK 的一部分。 admin.storage 只有方法 .bucket() (https://firebase.google.com/docs/reference/admin/node/admin.storage.Storage)。

我能够访问存储桶。 Bucket.getFiles() 有效,结果是一个包含大量元数据(如文件名、存储桶所有者等)的文件对象数组。如何从云存储中获取图像并将其插入到 html 对象中?

var admin = require("firebase-admin");

var serviceAccount = require("./randomDB-f12d3-admin-correctly-working.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://randomDB-f12d3.firebaseio.com",
  storageBucket: "randomDB-f12d3.appspot.com"
});

const gcs  = require("@google-cloud/storage");
gcs.projectId = "randomDB-f12d3";
gcs.keyFilename = "randomDB-f12d3-firebase-admin-correctly-working.json";

exports.getFile = functions.https.onRequest((req, res) => {
  
  cors(req, res, () => {
    if (req.method !== "GET") {
      return res.status(500).json({
        message: "Not allowed"
      });
    }

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

    bucket.getFiles().then((result)=>{
      
      console.log(result);
      res.send(result);
    });

  });

});

javascript reactjs firebase google-cloud-storage firebase-admin
2个回答
8
投票

Cloud Storage Admin SDK 只是 @google-cloud/storage 模块 的包装。 当您调用

admin.storage()
时,您返回的是该库中的 Storage 对象。 使用
admin.storage().bucket()
,您将获得项目的默认存储 Bucket。 从那里,您应该使用
file()
创建对该存储桶中文件的引用,并根据需要下载它们。


0
投票

我相信您想在网页上显示图像。 为此,您可以使用

signedUrl
downloadURL
并在图像标签中使用 url。

为每个文件生成签名 URL

const files = bucket.getFiles()
const signedUrls = await Promise.all(
  files.map(async (file) => {
    const [url] = await file.getSignedUrl({
      action: 'read',
      expires: Date.now() + 1000 * 60 * 60, // URL expires in 1 hour
    });
    return {
      name: file.name,
      url: url
    };
  })
);

使用带 html 图像标签的签名 url

const file = signedUrls[0] // first file in the array
<img src="${file.url}" alt="${file.name}" />`

您也可以使用下载网址

© www.soinside.com 2019 - 2024. All rights reserved.