接收 zip 文件,angularJs
Receive zip file, angularJs
当我想从 Rest api、
下载 zip 文件时遇到问题
当从我的服务器(带球衣)传输 zip 文件时,我收到它已损坏,...
我已经尝试将 responseType: 'arraybuffer'
放在我的 $http 请求上,但它没有解决任何问题...这是我的代码。
$http.get(uploadUrl, {
cache: false,
responseType: 'arraybuffer'
})
.success(function (data, $scope) {
var element = angular.element('<a/>');
console.debug("data : " + data);
element.attr({
href: 'data:application/octet-stream;charset=utf-8,' + encodeURI(data),
target: '_blank',
download: fileName
})[0].click();
})
.error(function () {
console.info("fail on download");
});
};
我正在以相同的方式下载 zip ($http / arrayBuffer) 并且它有效。
我猜问题出在:
encodeURI(data)
我认为你应该用 base64 编码(有很多例子,比如 https://github.com/niklasvh/base64-arraybuffer/blob/master/lib/base64-arraybuffer.js)
我以前遇到过这个问题。您还需要使用 Buffer
并触发 "Save As" 对话框的打开,如下所述:
var url = (...)
var expectedMediaType = (...)
var requestData = (...)
$http.post(url, requestData, {
params: {
queryParam: 'queryParamValue'
},
headers: {
'Content-Type': 'application/json',
'Accept': expectedMediaType
}
}).then(function (response) {
var filename = (...)
openSaveAsDialog(filename, response.data, expectedMediaType);
});
这里是openSaveAsDialog函数的内容:
function openSaveAsDialog(filename, content, mediaType) {
var blob = new Blob([content], {type: mediaType});
saveAs(blob, filename);
}
要使用saveAs
函数,您需要包含https://github.com/eligrey/FileSaver.js库。要安装它,只需在 HTML 页面中使用标记脚本引用其 js 文件。
<script src="js/FileSaver.js"></script>
我写了一篇博客 post 描述如何修复它:https://templth.wordpress.com/2014/11/21/handle-downloads-with-angular/。
希望对您有所帮助,
蒂埃里
当我想从 Rest api、
下载 zip 文件时遇到问题当从我的服务器(带球衣)传输 zip 文件时,我收到它已损坏,...
我已经尝试将 responseType: 'arraybuffer'
放在我的 $http 请求上,但它没有解决任何问题...这是我的代码。
$http.get(uploadUrl, {
cache: false,
responseType: 'arraybuffer'
})
.success(function (data, $scope) {
var element = angular.element('<a/>');
console.debug("data : " + data);
element.attr({
href: 'data:application/octet-stream;charset=utf-8,' + encodeURI(data),
target: '_blank',
download: fileName
})[0].click();
})
.error(function () {
console.info("fail on download");
});
};
我正在以相同的方式下载 zip ($http / arrayBuffer) 并且它有效。
我猜问题出在:
encodeURI(data)
我认为你应该用 base64 编码(有很多例子,比如 https://github.com/niklasvh/base64-arraybuffer/blob/master/lib/base64-arraybuffer.js)
我以前遇到过这个问题。您还需要使用 Buffer
并触发 "Save As" 对话框的打开,如下所述:
var url = (...)
var expectedMediaType = (...)
var requestData = (...)
$http.post(url, requestData, {
params: {
queryParam: 'queryParamValue'
},
headers: {
'Content-Type': 'application/json',
'Accept': expectedMediaType
}
}).then(function (response) {
var filename = (...)
openSaveAsDialog(filename, response.data, expectedMediaType);
});
这里是openSaveAsDialog函数的内容:
function openSaveAsDialog(filename, content, mediaType) {
var blob = new Blob([content], {type: mediaType});
saveAs(blob, filename);
}
要使用saveAs
函数,您需要包含https://github.com/eligrey/FileSaver.js库。要安装它,只需在 HTML 页面中使用标记脚本引用其 js 文件。
<script src="js/FileSaver.js"></script>
我写了一篇博客 post 描述如何修复它:https://templth.wordpress.com/2014/11/21/handle-downloads-with-angular/。
希望对您有所帮助, 蒂埃里