以zip方式下载多个Restful资源

时间:2016-04-14 03:26:52

标签: javascript rest

在阅读了几个小时后,我不确定接近它的最佳方法。我有一个由用户选择的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");
    });
});

1 个答案:

答案 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框架。