如何从onFinalize云函数获取getDownloadURL?

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

我正在开发一个用户可以上传图像的网站。当他们上传图像时,会触发

onFinalize
,它将创建一个包含图像 URL 等内容的文档。在使用云函数之前,我会在客户端使用
getDownloadURL
来获取 imageURL 并将其保存到文档中,但由于我使用云函数,我现在使用图像元数据和 mediaLink 作为 imageURL 但我可以看到它的表现与
getDownloadURL
不一样。

这是我目前正在使用的功能:

exports.imageFirestoreCreate = functions.storage
  .bucket()
  .object()
  .onFinalize(async (object) => {
    console.log(object);
    if (
      object.contentType.startsWith("image/") &&
      object.name.startsWith("images/")
    ) {
      const uploadDate = object.timeCreated;
      const imageLink = object.mediaLink;

      const images = firestore.collection("images");

      return images.add({
        imageURL: imageLink,
        createdAt: uploadDate,
      });
    } else {
      return null;
    }
  });

有没有办法从 onFinalize

getDownloadURL

javascript firebase google-cloud-platform google-cloud-functions firebase-storage
1个回答
0
投票

据我了解,您需要一个云函数,当新文件上传到存储桶时应该触发该函数。为了能够通过 Cloud Functions 而不是客户端读取下载 URL,请使用以下代码行:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp()

exports.imageFirestoreCreate = functions.storage.object().onFinalize(async (object) => {
    const newFile = admin.storage().bucket(object.bucket).file(object.name);
    const config = { action: 'read', expires: '01-01-2033' };
    const downloadUrls = await newFile.getSignedUrl(config);
    const downloadUrl = downloadUrls[0];
        
    const images = firestore.collection("images");
    await images.add({
      imageURL: downloadUrl,
    });
});

上面的代码将在

images
集合中添加一个新文档,其中包含上传文件的下载URL。

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