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
相关产品推荐
相关产品推荐

