You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:20:43