文件在javascript/Extjs中下载一个字节数组作为文件

Jep*_*zen 12 javascript extjs3

在我的Ext Js解决方案中,我正在调用一个返回此JSON格式的服务

{"success":true,"filename":"spreadsheet.xlsx","file":[80,75,3,4,20,0,...(many more)]}
Run Code Online (Sandbox Code Playgroud)

如何使用文件名和字节数组(文件)的内容创建文件下载对话框?

UPDATE

所以我发现这一点开始下载

var a = window.document.createElement('a');
                    a.href = window.URL.createObjectURL(new Blob(data.file, { type: 'application/octet-stream' }));
                    a.download = data.filename;

                    // Append anchor to body.
                    document.body.appendChild(a)
                    a.click();

                    // Remove anchor from body
                    document.body.removeChild(a)
Run Code Online (Sandbox Code Playgroud)

到目前为止很好

但我得到的文件已损坏所以我怀疑我需要编码/解码文件变量?

Jep*_*zen 26

在将文件传递给Blob之前,我必须将文件转换为Uint8Array

var arr = data.file;
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 = data.filename;

// Append anchor to body.
document.body.appendChild(a)
a.click();


// Remove anchor from body
document.body.removeChild(a)
Run Code Online (Sandbox Code Playgroud)

阅读这个答案帮助了很多/sf/answers/1137203791/