我正在尝试从我的Django视图下载一个Zip文件。但是我通过post request请求我的angularjs服务中的views函数。视图返回一个zip文件,但它没有被下载。 任何人都可以告诉我在angularjs服务中.success函数的内容是什么,以便下载zip文件?
答案 0 :(得分:0)
这个解决方案对我来说很好。我希望这会对你有所帮助。
var req = {
method: 'POST',
url: 'api/cdr/downloads/',
responseType:"arraybuffer",
data: selected
};
$http(req)
.success(function(data, status, headers){
var arr = data;
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 = headers('filename');
// Append anchor to body.
document.body.appendChild(a);
a.click();
// Remove anchor from body
document.body.removeChild(a);
}
).error(function(){
}
);
答案 1 :(得分:0)
这里发布的答案对我不起作用。以下是最终为我工作的内容:
在你的javascript中:
$http({
url: "/serveZip",
method: 'POST',
responseType: 'arraybuffer'
}).then(function success(response){
var a = document.createElement('a');
var blob = new Blob([response.data], {'type':"application/zip"});
a.href = URL.createObjectURL(blob);
a.download = "myZip.zip";
a.click();
});
在views.py中:
def serveZip(request):
zipPath = "path/to/myZip.zip"
servableZip = open(zipPath,'rb')
response = HttpResponse(servableZip, content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename="myZip.zip"'
return response
这对我在chrome中工作,没有尝试过其他地方,但如果它不能在其他浏览器中工作,你可以尝试application / octet-stream而不是application / zip。