javascript:从json返回的字节数组中打开文件

时间:2016-02-11 18:58:35

标签: javascript java json

在javasript中,我有一个字节数组,想要将其转换回原始的fileType并打开它。我已尝试使用image / png和application / pdf,但结果是一样的。文件已损坏,无法打开。有关如何做到这一点的任何建议吗?

服务器端,我的java代码是这样的:

...
File downloadFile = myService.retriveMyFile(input);
byte[] fileInBytes = new byte[(int)downloadFile.length()];
InputStream inputStream = null;
try {        
   inputStream = new FileInputStream(downloadFile);            
   inputStream.read(fileInBytes);            
} finally {
   inputStream.close();
}
String json = new Gson().toJson(fileInBytes);
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);   

在javascript中我尝试打开像这样的文件

...
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
var fileName = "test.png";
xhr.onload = function () {
   if (xhr.status === 200) {
   var jsonResponse = xhr.response;
   var json = JSON.stringify(jsonResponse),
   blob = new Blob([json], {type: "image/png"}),
   url = window.URL.createObjectURL(blob);
   a.href = url;
   a.download = fileName;
   a.click();
   window.URL.revokeObjectURL(url);
};

1 个答案:

答案 0 :(得分:0)

尝试将字节作为JSON发送时出现问题。 直接发送字节更容易:

在服务器上:

downloadFile打开一个InputStream,并将其内容复制到response.getOutputStream()

在客户端:

var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
var fileName = "test.png";

var xhr = new XMLHttpRequest();
xhr.open( "GET", <theurl>, true);
xhr.responseType = "blob";
xhr.onload = function() {
    var url = window.URL.createObjectURL(xhr.response);  
    a.href = url;
    a.download = fileName;
    a.click();
    window.URL.revokeObjectURL(url);
};

xhr.send();