【问题标题】:Download a zip file using Django?使用 Django 下载 zip 文件?
【发布时间】:2015-10-18 01:18:42
【问题描述】:

我正在尝试在发送请求后创建和下载文件。要发送请求,我使用 $.get 。下面是客户端和服务器端代码。

$(document).ready(function(){
    $(".scrape").on("click", function(){
        var url = $(".ib").val();
        var req_obj = {};
        req_obj["url"] = url;
        $.get("/scraper", req_obj, function(data){
            console.log(data);
            var blob = new Blob([data]);
            var link = document.createElement('a');
            link.href = window.URL.createObjectURL(blob);
            link.download = "myFileName.txt";
            link.click();
        });
    });
})

我在服务器上

def scraper(request):
    try:
        url = request.GET.get('url')
        html = urllib2.urlopen(url)
        parsed_html = BeautifulSoup(html)
        p_tags = parsed_html.findAll('p')
        title = parsed_html.title.text
        f = tempfile.NamedTemporaryFile()
        for tag in p_tags:
            f.write("\n")
            f.write(tag.getText())
            f.write("\n")
        response = HttpResponse(f, content_type='application/force-download')   
        response['Content-Disposition'] = 'attachment; filename="%s.txt"' % title
    except Exception as e:
        res_dict = {"status":0,"Exception":e}
        return HttpResponse(json.dumps(res_dict))           
    return response

响应码是 200,所以一切正常。即使在 Content-Disposition 标题中,我也可以看到该文件。但是正在下载一个空文件(因为响应为空)。如何下载正在创建的真实文件?如果我说application/force-download,为什么我必须编写用于在回调中下载的客户端代码?

如果没有 ajax,我也尝试将 url 作为查询参数传递。仍在下载一个空的 txt 文件。文件根本没有创建吗?

【问题讨论】:

    标签: python django download


    【解决方案1】:

    您正在尝试通过 Ajax 加载它,这不太可能工作。相反,请利用浏览器自身的能力下载文件:只需使用 window.location = url;

    【讨论】:

    【解决方案2】:

    奇怪地改变了服务器端使它工作。所以我发送一个ajax请求并得到一个文件作为响应。然后将响应存储在博客中并下载该文件。

    def scraper(request):
        try:
            url = request.GET.get('url')
            su_obj = ScrappedURL(url=url)
            su_obj.save()
            html = urllib2.urlopen(url)
            parsed_html = BeautifulSoup(html)
            p_tags = parsed_html.findAll('p')
            f = tempfile.NamedTemporaryFile()
            for tag in p_tags:
                f.write("\n")
                f.write(tag.getText())
                f.write("\n")
            f.seek(0)   
            response = HttpResponse(content_type ='application/force-download') 
            response['Content-Disposition'] = 'attachment; filename=file.txt'
            response.write(f.read())
        except Exception as e:
            res_dict = {"status":0,"Exception":e}
            return HttpResponse(json.dumps(res_dict))           
        return response
    

    看看:http://scraper-bookwormapp.rhcloud.com/

    【讨论】:

      猜你喜欢
      • 2020-10-26
      • 2015-04-30
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      相关资源
      最近更新 更多