Node.js中pdfmake生成PDF上传Cloudinary后无法打开的排查求助
问题排查与解决方案
可能的原因及修复步骤
1. 显式指定Cloudinary资源类型为raw
Cloudinary的resource_type: 'auto'有时会误判PDF文件类型,导致文件被错误处理。明确设置为raw可确保文件以原始PDF格式存储:
const uploadResult = await cloudinary.v2.uploader.upload(tempFilePath, { folder: 'invoices', resource_type: 'raw', // 替换auto为raw });
2. 修正PDF Buffer生成逻辑
使用createPdfKitDocument收集流块的方式可能未生成完整有效的PDF。建议改用pdfmake内置的createPdf方法直接生成Buffer,可靠性更高:
// 替换原PDF Buffer生成代码 const pdfBuffer = await new Promise((resolve, reject) => { const pdfmakes = new pdfmake(fonts); const pdfDoc = pdfmakes.createPdf(documentDefinition); pdfDoc.getBuffer((buffer) => { resolve(buffer); }); });
3. 直接上传Buffer(跳过临时文件)
写入临时文件再读取可能引入文件权限、写入不完整等额外问题。可以将Buffer转为Base64字符串直接上传:
const base64Pdf = `data:application/pdf;base64,${pdfBuffer.toString('base64')}`; const uploadResult = await cloudinary.v2.uploader.upload(base64Pdf, { folder: 'invoices', resource_type: 'raw', });
4. 验证本地PDF有效性
先检查本地生成的temp.pdf是否能正常打开。如果本地文件也无法打开,说明PDF生成逻辑本身存在问题,需要核对documentDefinition的结构、字体配置等是否符合pdfmake要求。
内容的提问来源于stack exchange,提问作者Aditya Cholkar
相关产品推荐
相关产品推荐

