javascript - 将多个 Restful 资源下载为 zip

标签 javascript rest

阅读了几个小时后,我不确定解决这个问题的最佳方法。我有一个用户选择的静态资源 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/

相关文章:

php - 在 PHP 中使用文字符号/对象初始值设定项解释 Javascript 对象

c# - 从 JavaScript 触发对 C# asp.net 代码的回调

angular - 如何在 Angular 项目中使用 HttpHeaders Link 进行分页?

vba - 在 VBA 中下载文件并存储它

json - 如何停止 Content-Length header 截断 REST 服务中的短 JSON 片段

javascript - jquery如何添加onclick额外功能,而onclick原始功能埋在未知的js文件中

javascript - javascript 中的逻辑未正确触发

javascript - 从隐藏元素获取宽度大小

java - 如何获取 REST 请求的请求内容类型?

c# - WCF 3.5 与 4.0 RESTful 服务性能对比