node.js - 如何使用 Drive API 以 PDF 文件形式获取 Google 文档并将该 blob 发送给我的 API 使用者?

标签 node.js google-drive-api

我正在使用 Express、Node 和 Google Drive API。我正在尝试使用 PDF 文件的 blob 响应对我的端点的 API 调用。但当我从 Drive API 获取文件时,我不想保存该文件,我基本上只是想将其存储在变量中,将其转换为 base64 并将其发送给我的 API 使用者。

快速概述正在发生的事情。我被困在步骤 3-4 了。 1. 消费者使用包含支付信息的有效负载调用我的 API 端点 2. 我从模板创建一个新文档,并使用有效负载通过 Docs API 填充该文档。 3. 我将文档导出为 PDF。 4. 我使用步骤 3 中的文档 blob 向我的 API 使用者发送响应。

我怎样才能实现这一目标?

我为什么要实现这个目标?基本上,我试图避免创建额外的工作来下载文件并将其存储在某个地方,因为这样我就需要与某些东西建立另一个连接。如果我无法避免这种情况,当我想尝试使用存储桶在 GCP 上处理此问题时。因此那里的建议也会很有帮助。

下面是我的代码的概述,

// this works
const driveAPI = google.drive({version:"v3", auth: client});
const fileId = await createDocFromTemplate();
const doc = updateDoc( fileId, req.body );

// now it gets tricky
const PDF_FILE = exportDocAsPdf(doc); // how can I temporarily store pdf to a variable?
const PDF_AS_BASE = transformPdfToBase64(PDF_FILE); // how can I convert pdf to base64?

// this is what I want to send back to the API consumer
res.send({
  id: fileId,
  fileAsPdf : PDF_AS_BASE
})

最佳答案

我相信您的目标如下。

  • 您想要导出 Google 文档,但不创建文件作为 Base64 数据。
  • 您希望使用 googleapis 和 Node.js 来实现此目的。
  • 您已经能够使用 Drive API 导出 Google 文档。

对于这个,这个答案怎么样?

不幸的是,我看不到您的 updateDoc( fileId, req.body )exportDocAsPdf(doc)transformPdfToBase64(PDF_FILE) 脚本。因此,在这个答案中,我想提出一个示例脚本,通过输入Google文档的文件ID来返回PDF格式的base64数据。

示例脚本:

在本例中,输入和输出值分别是Google文档的文件ID和PDF格式的base64数据。

async function exportFile(drive, documentId) {
  const res = await drive.files.export(
    {
      fileId: documentId,
      mimeType: "application/pdf",
    },
    { responseType: "arraybuffer" }
  );
  return Buffer.from(res.data).toString("base64");
}

const documentId = "###";  // Please set the Google Document ID

const driveAPI = google.drive({ version: "v3", auth: client });
const base64 = await exportFile(driveAPI, documentId).catch((err) => {
  if (err) console.log(err);
});
console.log(base64);
  • 在这种情况下,Google 文档会导出为 PDF 格式。此时的数据就是arraybuffer。因此,使用 Buffer.from(res.data).toString("base64") 检索 Base64 数据。

引用文献:

关于node.js - 如何使用 Drive API 以 PDF 文件形式获取 Google 文档并将该 blob 发送给我的 API 使用者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61642059/

相关文章:

storage - 将静态文件存储在我的 rails 应用程序中的谷歌驱动器上

google-apps-script - 是否有 G Suite/Google Apps API?

google-apps-script - 将驱动器文件夹中的所有文件从工作表转换为 CSV 并添加到新文件夹

google-drive-api - 使用服务帐户在 Android 上执行 com.google.api.services.drive.Drive.Files.Insert 时出现 403quotaExceeded 错误

javascript - 将参数传递给生成器函数

javascript - 为什么我需要在node-postgres中使用async/await两次

javascript - 使用 jsdom 或 Canvas for node.js 获取 Vibrant.js 样本

node.js - 引用错误: window is not defined

javascript - 回调中的 Socket.io-emit 给出 SyntaxError : Unexpected end of JSON input

php - 如何使用 Google Drive Api v3 和 php 显示文本文件的内容?