将字节数组写入文件Javascript

时间:2018-09-01 23:05:05

标签: javascript arrays rest xmlhttprequest downloadfile

专家您好,我有java rest webservice,可以将文档以字节数组形式返回,我需要编写javascript代码以获取webservice的响应并将其写入文件,以便以pdf格式下载该文件。请查看该webservice的屏幕截图响应并查看我的示例代码,该代码将下载损坏的pdf文件`

        var data = new FormData();
        data.append('PARAM1', 'Value1');
        data.append('PARAM2', 'Value2');
        var xhr = new XMLHttpRequest();
        xhr.open('POST', 'SERVICEURL');
        xhr.withCredentials = true;
        xhr.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
        xhr.onload = function() {

            console.log('Response text = ' + xhr.responseText);
            console.log('Returned status = ' + xhr.status);


            var arr = [];
            arr.push(xhr.responseText);

            var byteArray = new Uint8Array(arr);
            var a = window.document.createElement('a');
            a.href = window.URL.createObjectURL(new Blob(byteArray, { type: 'application/octet-stream' }));
            a.download = "tst.pdf";
            // Append anchor to body.
            document.body.appendChild(a)
            a.click();
            // Remove anchor from body
            document.body.removeChild(a)

        };
        xhr.send(data);

`enter image description here

1 个答案:

答案 0 :(得分:2)

由于您请求的是二进制文件,因此您也需要告诉XHR有关taht的信息,否则它将使用默认的“文本”(UTF-8)编码,该编码会将pdf解释为文本,并且会弄乱编码。只需分配{{ 1}}属性为pdf的MIME类型

responseType

您将使用var xhr = new XMLHttpRequest(); xhr.responseType = 'blob'; // tell XHR that the response will be a pdf file // OR xhr.responseType = 'application/pdf'; if above doesn't work 属性而不是response访问它。 因此,您将使用responseText,它将返回一个Blob。

如果这不起作用,请通知我将更新另一个解决方案。

更新:

arr.push(xhr.response);