当我打开 Salesforce 附件时,它已下载,但 pdf 为空

Chr*_*son 6 javascript blob salesforce binary-data arraybuffer

我正在使用 Rest API 获取附件正文。

\n
var config = {\n                method: 'get',\n                url: '<Domanin>/services/data/v48.0/sobjects/Attachment/00PD000000HQD68MAH/Body',\n                headers: {\n                    'Authorization': `Bearer ${\n                        accessToken\n                    }`,\n                    'content-type':'application/pdf'\n                },\n            };\n\n       let rawData = await axios(config);\n       rawData = rawData.data\n\n\n
Run Code Online (Sandbox Code Playgroud)\n

我正在获取这种格式的 PDF 数据

\n
%PDF-1.5\n%\xc3\x93\xc3\xb4\xc3\x8c\xc3\xa1\n1 0 obj\n<<\n
Run Code Online (Sandbox Code Playgroud)\n

在客户端,我试图将其作为可下载文件,但我得到的是空白 pdf。实际的 pdf 包含 2 页,下载的 pdf 也包含两页,但它们是空白的。

\n

客户端代码:

\n
 var downloadLink = document.createElement('a');\n            downloadLink.target = '_blank';\n            downloadLink.download = 'test.pdf';\n\n            // convert downloaded data to a Blob\n            var blob = new Blob(([rawData]), {type: 'application/pdf'});\n\n            // create an object URL from the Blob\n            var downloadUrl = URL.createObjectURL(blob);\n\n            // set object URL as the anchor's href\n            downloadLink.href = downloadUrl;\n\n            // append the anchor to document body\n            document.body.append(downloadLink);\n\n            // fire a click event on the anchor\n            downloadLink.click();\n
Run Code Online (Sandbox Code Playgroud)\n

请告诉我上面的逻辑有什么问题

\n

vis*_*esh 0

请在请求配置中指定responseType: 'arraybuffer'。将您的配置对象修改为

{
                method: 'get',
                url: '<Domanin>/services/data/v48.0/sobjects/Attachment/00PD000000HQD68MAH/Body',
                headers: {
                    'Authorization': `Bearer ${
                        accessToken
                    }`
                },
                'responseType': 'arraybuffer'
            };
Run Code Online (Sandbox Code Playgroud)