使用PDFKit生成PDF后上传Azure Blob Storage报错求助
问题分析与解决方案
你的代码存在两个核心问题:
- PDFKit的
doc是可读流对象,不是Buffer,直接传给blockBlobClient.upload会导致数据格式不兼容。 Buffer.byteLength(doc)完全错误,该方法仅能计算Buffer或字符串的字节长度,传入流对象会得到错误的长度值,引发上传时的长度校验失败。
解决方案一:转换为Buffer后上传
适合小文件,先将PDF流收集为Buffer再上传:
const doc = new PDFDocument(); doc.fontSize(27).text("test", 100, 100); doc.end(); // 收集流数据到Buffer const chunks = []; doc.on('data', chunk => chunks.push(chunk)); doc.on('end', async () => { const pdfBuffer = Buffer.concat(chunks); const uploadBlobResponse = await blockBlobClient.upload(pdfBuffer, pdfBuffer.length); console.log('上传成功', uploadBlobResponse); });
解决方案二:直接上传可读流(推荐)
Azure Blob Storage SDK提供了uploadStream方法,可直接处理可读流,无需提前计算长度,适合大文件场景:
const doc = new PDFDocument(); doc.fontSize(27).text("test", 100, 100); doc.end(); // 使用uploadStream上传流 const uploadBlobResponse = await blockBlobClient.uploadStream(doc); console.log('上传成功', uploadBlobResponse);
额外注意:
- 确保你的Azure Blob Storage客户端拥有目标容器的写入权限,否则会出现权限相关错误。
- 若仍报错,可检查Azure SDK版本是否与PDFKit兼容,优先使用最新稳定版的Azure Storage SDK。
内容的提问来源于stack exchange,提问作者jon
相关产品推荐
相关产品推荐

