Node.js 通过Google Drive API将空白PDF上载到Google Drive

Node.js 通过Google Drive API将空白PDF上载到Google Drive,node.js,google-api,google-drive-api,google-api-js-client,Node.js,Google Api,Google Drive Api,Google Api Js Client,我正在尝试使用和google drive将生成的pdf上载到我的google drive文件夹,但每次上载时,它都是一个空白文档,尽管大小与生成的标签相同。我有一个单独的端点,当我调用createLabel函数时,我会返回doc.pipe(res),这是我如何知道pdf正确生成的,但是当我尝试将其重新设置为我的上载到googledrive.js时,该文件会成功上载为空白的pdf。有人有什么建议吗 创建标签.js module.exports.createLabel=async( fromAddr

我正在尝试使用和google drive将生成的pdf上载到我的google drive文件夹,但每次上载时,它都是一个空白文档,尽管大小与生成的标签相同。我有一个单独的端点,当我调用
createLabel
函数时,我会返回
doc.pipe(res)
,这是我如何知道pdf正确生成的,但是当我尝试将其重新设置为我的
上载到googledrive.js
时,该文件会成功上载为空白的pdf。有人有什么建议吗

创建标签.js

module.exports.createLabel=async(
fromAddress,
致辞,
收件人
重量,
qrCodeUrl,
订单号
) => {
const doc=新的PDFDocument();
//圆形矩形是布局
doc.roundedRect(10,10,590,720,5).stroke();
//使图像符合尺寸
image(“assets/rocketship.png”,40,30,{fit:[100100]}).stroke();
doc.rect(20,20,200,150).stroke();
文件字体大小(20)。字体(“倍黑体”)。文本(“From:”,230,30)。向下移动(0.5);
文件字体大小(18)。字体(“时代罗马”)。文本(fromAddress);
doc.rect(220,20,370,150).stroke();
文件字体大小(20)。字体(“倍黑体”)。文本(“至:”,30,180)。向下移动(0.5);
文件字体大小(18)。字体(“时代罗马”)。文本(地址)。向下移动(1);
文件字体大小(18)。字体(“倍黑体”)。文本(收件人)。向下移动(1);
doc.rect(20170570300).stroke();
doc.rect(20470270250).stroke();
医生
.fontSize(20)
.font(“时代罗马”)
.text(`Order ID:${orderID}`,30480)
。向下移动(0.5);
doc.fontSize(20).font(“Times Roman”).text(`Weight:${Weight}').moveDown(0.5);
文档图像(qrCodeUrl,300440,{宽度:300});
doc.rect(290470300250).stroke();
doc.end();
返回等待获取流(doc);
};
index.js

//其他设置代码
试一试{
常数{
fromAddress,
收件人
装运包装,
医嘱ID,
致辞,
重量,
}=请求主体;
logger.info(“试图生成二维码”);
const qrCodeUrl=wait createQR(shippingPackageId.toString());
//创建标签
logger.info(“试图创建标签”);
const stream=等待createLabel(
fromAddress,
致辞,
收件人
重量,
qrCodeUrl,
订单号
);
logger.info(“上传到谷歌硬盘”);
uploadToDrive(订单ID,流);
//如果一切顺利,回复200
返回res.status(200).send(“成功上传到谷歌硬盘”);
}捕获(错误){
抛出res.status(500)。发送(错误);
}
上传到googledrive.js

module.exports.uploadToDrive=(订单ID,流)=>{
//…谷歌硬盘设置功能
/**
*列出最多10个文件的名称和ID。
*@param{google.auth.OAuth2}对授权的OAuth2客户端进行身份验证。
*/
函数上传文件(auth){
const folderId=`1iAZcU12zgwWC6Iw1eln9kZGx8POhkVLT`;
常量文件元数据={
名称:`label_${orderID}.pdf`,
家长:[folderId],
};
常数媒体={
mimeType:“application/pdf”,
主体:溪流,
};
const drive=google.drive({version:“v3”,auth});
drive.files.create(
{
资源:fileMetadata,
媒体:媒体,,
字段:“id”,
},
函数(错误,文件){
如果(错误){
//处理错误
犯错误;
}否则{
console.log(“上传的文件”);
}
}
);
}

当我看到
doc
时,我认为它是stream对象,所以我想提出以下修改。请修改
createLabel
的功能,如下所示

发件人: 致: 参考:

我可以问一下关于
getStream()的问题吗
在您的脚本中?是的,当然,它来自get stream库,在这里有一条注释,在发送流之前等待文档完成检查流您没有上传任何内容。感谢您的回复。从您的回复中,我提出了一个修改点作为答案。您能确认吗?当我测试此modifi时阳离子,在我的环境中,我可以确认修改后的
createLabel
脚本是否有效。但是,如果这不是您问题的直接解决方案,我很抱歉。@Chad Nehemiah欢迎。感谢您让我知道。我很高兴您的问题得到解决。如果您的问题得到解决,请按下“接受”按钮。其他拥有sam的人你的问题也可以作为一个可以解决的问题。我认为你的问题和解决方案对他们很有用。如果你找不到按钮,请随时告诉我。
return await getStream(doc);
return doc;