node.js - 如何使用 Drive API 将 Google Doc 获取为 PDF 文件并将该 blob 发送给我的 API 使用者?
问题描述
我正在使用 Express、Node 和 Google Drive API。我正在尝试使用 PDF 文件的 blob 响应对我的端点的 API 调用。但是当我从 Drive API 获取文件时我不想保存文件,我基本上只想将它存储在一个变量中,将其转换为 base64 并将其发送给我的 API 使用者。
快速概览正在发生的事情。我被困在第3-4步。1. 消费者使用包含支付信息的有效负载调用我的 API 端点 2. 我从模板创建一个新文档,并使用有效负载通过 Docs API 填充文档。3. 我将文档导出为 PDF。4. 我用步骤 3 中的文档块向我的 API 使用者发送响应。
我怎样才能做到这一点?
我为什么要实现这个目标?基本上,我试图避免创建额外的工作来下载文件并将其存储在某处,因为那时我需要另一个连接到某些东西。如果我无法避免这种情况,那么当我想尝试使用 Buckets 在 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 Document 的文件 ID 返回 PDF 格式的 base64 数据。
示例脚本:
在这种情况下,输入和输出值分别是 Google Document 的文件 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")
.
参考:
推荐阅读
- vue.js - 切换 VueJS 中的其他元素
- javascript - 试图将reduce函数包装在另一个函数中以使其更通用
- c++ - Kruskal 算法的 C++ 实现中的分段错误
- r - R在交叉函数中传递一个向量
- python - 在函数中使用 self 时不允许我调用该函数
- mongodb - 使用 Apache Camel 和 MongoDB 的 POST 请求
- mongodb - 简单查询的上下文
- matplotlib - Matplotlib savefig 图像:提高输出质量?
- google-cloud-platform - Google Cloud Functions Java 11(测试版)运行时 - 性能问题
- security - 无法从 Windows ODBC DSN 客户端机器使用 SSL 通过 sec 端口连接到 DB2 数据库服务器