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

React中Blob转PDF字符串再转Base64后下载失败求助

问题修复方案

问题根源

服务端转码时错误地将PDF二进制Buffer转换为UTF-8字符串,再基于该字符串生成Base64编码。PDF属于二进制文件,直接转字符串会丢失或损坏关键二进制数据,导致最终下载的PDF文件无法正常解析。

修复后的服务端代码

修改downloadBlobToString的编码逻辑,直接对二进制Buffer进行Base64编码:

const downloadBlobToString = async (containerClient: any, blobName: any) => {
  const blobClient = await containerClient.getBlobClient(blobName);
  const downloadResponse = await blobClient.download(0);
  const downloaded = await streamToBuffer(downloadResponse.readableStreamBody);
  // 直接对Buffer做Base64编码,跳过toString()步骤
  const encodedString = downloaded.toString('base64');
  return encodedString;
};

前端代码优化与验证

原前端转换逻辑是正确的,也可以简化为直接使用data URI方式下载,无需手动处理ArrayBuffer:

const savePdfFromBase64 = (reportName: string, base64: string) => {
  const link = document.createElement('a');
  link.href = `data:application/pdf;base64,${base64}`;
  link.download = reportName;
  link.click();
};

// 调用方式
savePdfFromBase64('DownloadedPDF', props.offerLetterPdf);

关键说明

  • 服务端核心修复:避免将二进制Buffer转成字符串,直接调用Buffer.toString('base64')生成正确的Base64编码。
  • 前端两种实现方式均可正常工作,简化版代码更简洁,无需手动处理ArrayBuffer和Blob转换。

内容的提问来源于stack exchange,提问作者user22104593

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:27:05