我试图上传一个生成的PDF到我的谷歌驱动器文件夹,使用 pdf包 和谷歌驱动器的 顶端 但每次上传时,尽管与生成的标签大小相同,但都是一个空白文档。我有一个单独的端点,我返回 doc.pipe(res)
当我呼叫 createLabel
函数,所以我知道pdf是正确生成的,但当我尝试流媒体时,我的 upload-to-googledrive.js
,该文件成功上传为 空白 pdf。有人有什么建议吗?
create_label.js
module.exports.createLabel = async (
fromAddress,
toAddress,
recipient,
weight,
qrCodeUrl,
orderID
) => {
const doc = new PDFDocument();
// Rounded Rect is layout
doc.roundedRect(10, 10, 590, 720, 5).stroke();
// Fit the image within the dimensions
doc.image("assets/rocketship.png", 40, 30, { fit: [100, 100] }).stroke();
doc.rect(20, 20, 200, 150).stroke();
doc.fontSize(20).font("Times-Bold").text("From:", 230, 30).moveDown(0.5);
doc.fontSize(18).font("Times-Roman").text(fromAddress);
doc.rect(220, 20, 370, 150).stroke();
doc.fontSize(20).font("Times-Bold").text("To:", 30, 180).moveDown(0.5);
doc.fontSize(18).font("Times-Roman").text(toAddress).moveDown(1);
doc.fontSize(18).font("Times-Bold").text(recipient).moveDown(1);
doc.rect(20, 170, 570, 300).stroke();
doc.rect(20, 470, 270, 250).stroke();
doc
.fontSize(20)
.font("Times-Roman")
.text(`Order ID: ${orderID}`, 30, 480)
.moveDown(0.5);
doc.fontSize(20).font("Times-Roman").text(`Weight: ${weight}`).moveDown(0.5);
doc.image(qrCodeUrl, 300, 440, { width: 300 });
doc.rect(290, 470, 300, 250).stroke();
doc.end();
return await getStream(doc);
};
创建标签.js
// other setup code
try {
const {
fromAddress,
recipient,
shippingPackageId,
orderID,
toAddress,
weight,
} = req.body;
logger.info("Attempting to generate QR code");
const qrCodeUrl = await createQR(shippingPackageId.toString());
// create label
logger.info("Attempting to create label");
const stream = await createLabel(
fromAddress,
toAddress,
recipient,
weight,
qrCodeUrl,
orderID
);
logger.info("Uploading to google drive");
uploadToDrive(orderID, stream);
//Respond 200 if everything went well
return res.status(200).send("Succesfully Uploaded to google drive");
} catch (error) {
throw res.status(500).send(error);
}
上传到googledrive.js
module.exports.uploadToDrive = (orderID, stream) => {
// ... google drive setup functions
/**
* Lists the names and IDs of up to 10 files.
* @param {google.auth.OAuth2} auth An authorized OAuth2 client.
*/
function uploadFile(auth) {
const folderId = `1iAZcU12zgwWC6Iw1eln9kZGx8POhkVLT`;
const fileMetadata = {
name: `label_${orderID}.pdf`,
parents: [folderId],
};
const media = {
mimeType: "application/pdf",
body: stream,
};
const drive = google.drive({ version: "v3", auth });
drive.files.create(
{
resource: fileMetadata,
media: media,
fields: "id",
},
function (err, file) {
if (err) {
// Handle error
throw err;
} else {
console.log("file uploaded");
}
}
);
}
当我看到 doc
我以为是流对象的问题。所以我想提出以下修改意见。请修改 createLabel
如下。
return await getStream(doc);
return doc;