阅读了几个小时后,我不确定解决这个问题的最佳方法。我有一个用户选择的静态资源 url(同一域)列表,我想将它们打包以供立即下载。任何指向“正确”方法的指针都会很棒:)
我正在使用 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");
});
});
最佳答案
我看到两个问题:
- 它是
zip.file('nameofile.fits', data)
,而不是zip.file(data, 'nameofile.fits')
$.get
仅处理文本内容,但 FITS files看起来像二进制文件
$.get
尝试根据其编码(通常是 UTF-8)解码内容。对于二进制文件,解码步骤会破坏内容。您可以通过将内容转换为 blob 并使用 saveAs
下载来检查此步骤。
要解决此问题,请参阅 this page :使用 JSZipUtils、带有 responseType = 'arraybuffer'
的 XMLHttpRequest
或任何可让您下载二进制内容的 ajax 框架。
关于javascript - 将多个 Restful 资源下载为 zip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36613342/