我正在使用 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/