使用云函数中的firebase-admin将Base64编码的PDF字符串保存到firebase存储

qpgpyjmq  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(74)

我有一个以base-64字符串编码的PDF文件的内容,我想使用TypeScript云函数中的Firebase Admin SDK将其保存到Firebase存储。

const base64Pdf = ...;
const file = admin.storage().bucket().file("invoices/642d5000-851f-449d-8c4a-ec49aafabf80.pdf");
const pdfBuffer = Buffer.from(base64Pdf, "base64");
try {
  await file.setMetadata({
    contentType: "application/pdf",
  });
  await file.save(pdfBuffer);
  const signedUrls = await file.getSignedUrl({
    action: "read",
    expires: "12-31-2500",
  });
  ...
} catch (e) {
  functions.logger.error(`[checkDocuments] Error saving PDF: ${e}`);
}

但是我一直收到一个错误消息,说文件对象不存在。我知道它不存在,因为我试图创建它:
保存PDF时出错:错误:没有此对象:myproject.appspot.com/invoices/642d5000-851f-449d-8c4a-ec49aafabf80.pdf
请注意,我已经仔细检查了项目是否启用了Firebase存储,甚至还尝试创建了一个“invoices”文件夹。

7hiiyaii

7hiiyaii1#

文件 * 必须 * 存在,才能设置其元数据。请尝试按如下所示更新setMetadata()save()的顺序:

// save file before setting metadata
await file.save(pdfBuffer);

await file.setMetadata({
  contentType: "application/pdf",
});

const signedUrls = await file.getSignedUrl({
  action: "read",
  expires: "12-31-2500",
});

或者,您可以使用save()方法本身设置元数据:

await file.save(pdfBuffer, {
  metadata: {
    contentType: "application/pdf"
  },
});

相关问题