如何将Google Sheets导出为PDF并直接上传到Google Drive指定文件夹
Google Sheet转PDF直接存入指定Drive文件夹解决方案
核心调整逻辑
你当前的代码是将Google Drive导出的PDF流写入本地服务器磁盘,必然会经过你的服务器,不符合你不中转、不存服务器的需求。直接用Google Drive原生API在云端完成格式转换+存储即可,全程不需要文件流经你的服务器。
场景1:无需自定义PDF导出参数(推荐)
直接调用drive.files.copy接口,指定转换后的格式为PDF、父文件夹为目标存储文件夹即可,完全在云端处理:
const res = await g.drive.files.copy({ fileId: newSpreadsheetsId, // 源Google Sheet的ID requestBody: { name: "导出的PDF文件名.pdf", // 你要设置的PDF文件名 mimeType: "application/pdf", // 指定转换为PDF格式 parents: ["替换为你的目标文件夹ID"] // 要存入的指定文件夹ID } }); // 转换完成后res.data.id就是新生成的PDF文件ID console.log("PDF生成完成,文件ID:", res.data.id);
注意:你的API授权账号需要同时拥有源Sheet的读取权限、目标文件夹的写入权限,授权范围需包含https://www.googleapis.com/auth/drive。
场景2:需要自定义PDF导出参数
如果你需要自定义PDF的导出配置(比如页面方向、页边距、导出范围等),可以用流对接的方式,内存中转不会落盘到服务器磁盘:
// 导出PDF流 const exportRes = await g.drive.files.export( { fileId: newSpreadsheetsId, mimeType: "application/pdf", // 这里可以加你需要的导出参数,比如portrait=true等 }, { responseType: "stream" } ); // 直接将流上传到目标Drive文件夹,不写入本地磁盘 await g.drive.files.create({ requestBody: { name: "自定义导出的PDF.pdf", mimeType: "application/pdf", parents: ["替换为你的目标文件夹ID"] }, media: { mimeType: "application/pdf", body: exportRes.data // 直接用导出的流作为上传内容 } }); console.log("自定义PDF导出并存储完成");
内容的提问来源于stack exchange,提问作者Ludovic Argenty
相关产品推荐
相关产品推荐

