将字节数组写入文件Javascript

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将字节数组写入文件Javascript相关的知识,希望对你有一定的参考价值。

Hello专家我有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

答案

由于您正在请求二进制文件,您需要告诉XHR taht否则它将使用默认的“文本”(UTF-8)编码将pdf解释为文本并且会弄乱编码。只需为responseType属性分配MIME类型pdf

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访问它。所以你将使用arr.push(xhr.response);它将返回一个Blob。

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

更新:

var xhr = new XMLHttpRequest();
xhr.responseType = 'blob'; // tell XHR that the response will be a pdf file
xhr.onload = function() {
    var blob = this.response;
    var a = window.document.createElement('a');
    a.href = window.URL.createObjectURL(blob);
    a.download = "tst.pdf";
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
};

以上是关于将字节数组写入文件Javascript的主要内容,如果未能解决你的问题,请参考以下文章

如何将字节数组写入 Android 中的文件?

为啥将许多小字节数组写入文件比写入一个大数组要快?

将字节数组中的文件写入 zip 文件

如何将 zip 文件从字节数组写入磁盘

如何将编码 h264 写入文件以外的字节数组

将像素图像写入CSV文件