调用Salesforce REST API获取Attachment后生成PDF为空白如何解决
核心问题
- axios默认将返回值解析为UTF-8文本格式,PDF属于二进制文件,强制转文本会破坏原始字节流,导致PDF的渲染数据丢失但元数据(如页数、文件结构)保留,所以出现页数正确但内容空白的情况。
- 冗余配置问题:GET请求不需要设置
Content-Type请求头,该字段用于标识请求体的内容类型,GET请求无请求体,该配置无效。
修复方案
首先修改请求配置,明确指定axios接收二进制数据:
var config = { method: 'get', url: '<Domain>/services/data/v48.0/sobjects/Attachment/00PD000000HQD68MAH/Body', headers: { 'Authorization': `Bearer ${accessToken}` }, // 关键配置:指定返回值为ArrayBuffer二进制格式 responseType: 'arraybuffer' }; let rawData = await axios(config); rawData = rawData.data
客户端下载逻辑无需大幅修改,直接使用返回的ArrayBuffer生成Blob即可,可新增内存释放优化项:
var downloadLink = document.createElement('a'); downloadLink.target = '_blank'; downloadLink.download = 'test.pdf'; // 直接传入ArrayBuffer生成Blob即可 var blob = new Blob([rawData], {type: 'application/pdf'}); var downloadUrl = URL.createObjectURL(blob); downloadLink.href = downloadUrl; document.body.append(downloadLink); downloadLink.click(); // 释放对象URL,避免内存泄漏 URL.revokeObjectURL(downloadUrl); downloadLink.remove();
内容的提问来源于stack exchange,提问作者Chris Blesson
相关产品推荐
相关产品推荐

