以zip格式下载多个Restful资源

Download multiple Restful resources as zip

本文关键字:Restful 资源 下载 zip 格式      更新时间:2024-06-10

经过几个小时的阅读,我不确定最好的方法。我有一个用户选择的restful资源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('nameoffile.fits', data),而不是zip.file(data, 'nameoffile.fits')
  • $.get只处理文本内容,但FITS文件看起来像二进制文件

$.get尝试从其编码(通常为UTF-8)对内容进行解码。对于二进制文件,解码步骤会破坏内容。您可以通过将内容转换为blob并使用saveAs下载来检查此步骤

要解决这个问题,请参阅本页:使用JSZipUtils、带有responseType = 'arraybuffer'XMLHttpRequest,或者任何允许下载二进制内容的ajax框架。