如何通过angular.js下载HTTP:POST请求返回的二进制文件
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。
以下是我试图通过我的网络应用程序执行的代码:
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();
});
相关文章:
- 当我在form_for中的text_field_tag中点击Enter时,如何禁止发出POST请求
- 为什么 AJAX POST 请求不起作用
- Ajax POST请求没有'我不了解PHP
- 防止双击执行两次jQuery post请求
- Javascript XMLHttpRequest——只有第一个POST请求有效
- 如何使用Javascript获取POST请求填充的元素的值
- NodeJS中POST请求的请求体为null
- 在Fiddler JavaScript中识别POST请求
- DreamFactory REST API POST休息/用户/会话请求总是在IE9中返回错误
- 使用application/x-www-form-urlencoded使用node.js在post请求中发送数组
- 打开一个选项卡,并在firefox网络扩展中向其发出POST请求
- 通过AJAX向同一页面发送POST请求,并使用$_POST获取值
- Ajax Post请求不起作用
- 如何在cloud9中向server.js发送post请求
- mootools表单json post请求
- 可以'无法在CasperJS中复制POST请求
- node.js请求POST数组“;第一个参数必须是字符串或缓冲区;
- PythonBottle:访问请求POST数据中的数组变量
- NodeJS请求POST图标
- Yii框架2.0 AJAX请求POST方法