使用angular-js和django下载Zip文件

时间:2015-02-27 13:48:02

标签: django angularjs

我正在尝试从我的Django视图下载一个Zip文件。但是我通过post request请求我的angularjs服务中的views函数。视图返回一个zip文件,但它没有被下载。 任何人都可以告诉我在angularjs服务中.success函数的内容是什么,以便下载zip文件?

2 个答案:

答案 0 :(得分:0)

这个解决方案对我来说很好。我希望这会对你有所帮助。

var req = {
        method: 'POST',
        url: 'api/cdr/downloads/',
        responseType:"arraybuffer",
        data: selected
      };

      $http(req)
        .success(function(data, status, headers){
          var arr = data;
          var byteArray = new Uint8Array(arr);
          var a = window.document.createElement('a');

          a.href = window.URL.createObjectURL(
            new Blob([byteArray], { type: 'application/octet-stream' })
          );
          a.download = headers('filename');

          // Append anchor to body.
          document.body.appendChild(a);
          a.click();


          // Remove anchor from body
          document.body.removeChild(a);
        }
      ).error(function(){
        }
      );

答案 1 :(得分:0)

这里发布的答案对我不起作用。以下是最终为我工作的内容:

在你的javascript中:

      $http({
                url: "/serveZip",
                method: 'POST',
                responseType: 'arraybuffer'
            }).then(function success(response){
                    var a = document.createElement('a');
                    var blob = new Blob([response.data], {'type':"application/zip"});
                    a.href = URL.createObjectURL(blob);
                    a.download = "myZip.zip";
                    a.click();
                    });

在views.py中:

def serveZip(request):
    zipPath = "path/to/myZip.zip"
    servableZip = open(zipPath,'rb')
    response = HttpResponse(servableZip, content_type='application/zip') 
    response['Content-Disposition'] = 'attachment; filename="myZip.zip"'
    return response

这对我在chrome中工作,没有尝试过其他地方,但如果它不能在其他浏览器中工作,你可以尝试application / octet-stream而不是application / zip。