在阅读了几个小时后,我不确定接近它的最佳方法。我有一个由用户选择的restful资源网址(相同的域名)列表,我想打包它们以便立即下载。任何指向'正确'方法的指针都会很棒:)
我正在使用Django Rest Framework,并尝试在前端使用JSZip.js,但只是得到垃圾 - zip文件不会打开(我假设我在某处某处出错了... )
$(document).ready(function () {
$.ajax({
type: "GET",
url:"http://127.0.0.1:8000/data/test/?format=fits",
contentType: "application/fits",
accepts: "application/fits",
})
.done(function(data) {
console.log("Success");
var zip = new JSZip();
// create a file
zip.file(data, 'nameoffile.fits');
var content = null;
if (JSZip.support.uint8array){
content = zip.generate({type:"uint8array"});
} else {
content = zip.generate({type:"string"});
};
$('#download').click(function(){
var blob = zip.generate({type:"blob"});
saveAs(blob, "downloadable.zip");
});
})
.fail(function(data) {
console.log("Failed");
})
.always(function() {
console.log("In Always");
});
});
答案 0 :(得分:1)
我看到两个问题:
zip.file('nameoffile.fits', data)
,而不是zip.file(data, 'nameoffile.fits')
$.get
仅处理文字内容,但FITS files看起来像二进制文件 $.get
尝试从其编码中解码内容(通常为UTF-8)。使用二进制文件,解码步骤会破坏内容。您可以通过将内容转换为blob并使用saveAs
下载它来检查此步骤。
要解决此问题,请参阅this page:使用JSZipUtils,使用XMLHttpRequest
responseType = 'arraybuffer'
,或使用任何可以下载二进制内容的ajax框架。