[英]How to download a binary file returned from HTTP:POST request via angular.js?
我正在为构建的服务器使用基于Angular.js的查看器,试图添加“执行并下载”按钮。
我发送请求以执行某项的方式是通过HTTP:POST请求,带有标头:
"Accept" = "application/zip"
"X-MyApp-URI = "path/to/my/file/that/the/server/can/access/to"
服务器对这种请求的响应基本上是:
X-Powered-By: Servlet/3.0
Content-Type: application/zip
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Content-Type, Content-Disposition, Accept, Authorization, X-.....
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Origin: *
Content-Disposition: inline; filename="result.zip"
Transfer-Encoding: chunked
Date: Mon, 02 Nov 2015 15:29:42 GMT
我已经尝试使用RESTClient 3.4和Postman应用程序执行此操作,在两种情况下,下载的结果文件都是我发送的正确zip。
这是我试图通过Web应用程序执行的代码:
var config = {'Accept':'application/zip', 'X-MyApp-URI' = 'path..'};
$http.post("../serverPath",{responseType: "bufferArray"}, config)
.success(function (response) {
var bytes = new Array(response.length);
for (var i = 0; i < response.length; i++) {
bytes[i] = response.charCodeAt(i)
}
var bytesUint = new Uint8Array(bytes);
var blob = new Blob(bytesUint, {type: 'application/zip'});
var blobUrl = URL.createObjectURL(blob);
var a = document.createElement("a");
document.body.appendChild(a);
a.href = blobUrl;
a.download = 'result.zip';
a.click();
});
不幸的是,我尝试了几乎可以在网络上找到的所有参数组合,但没有帮助,通过上述Blob下载的文件总是损坏。
我可以使用的解决方案涉及纯JS代码,jQuery或专门的Angular.JS以及任何可能已经帮助解决此问题的Apache已开发插件。
尝试将Uint8Array
直接传递给Blob
,如下所示:
var config = {'Accept':'application/zip', 'X-MyApp-URI' = 'path..'};
$http.post("../serverPath",{responseType: "bufferArray"}, config)
.success(function (response) {
var bytesUint = new Uint8Array(response);
var blob = new Blob([bytesUint], {type: 'application/zip'});
var blobUrl = URL.createObjectURL(blob);
var a = document.createElement("a");
document.body.appendChild(a);
a.href = blobUrl;
a.download = 'result.zip';
a.click();
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.