美文网首页
django实现下载zip压缩包--亲测有效

django实现下载zip压缩包--亲测有效

作者: 清风徐来_简 | 来源:发表于2020-05-22 18:14 被阅读0次

环境:谷歌 + python2.7 + django1.11.14 !!!话不多说,直接上代码

前端:

let download_mod_folder = document.getElementById("download_mod_folder");
download_mod_folder.addEventListener('click', function () {
    if (Object.keys(mod_dict).length === 0) {
        alert('暂无数据可下载')
    }
    else {
        console.log('开始下载')
        var $form = $("<form method='get'></form>");
        $form.attr("action", "/knowledge/diff_test/send_zipfile/");
        $(document.body).append($form);
        //提交表单,实现下载
        $form.submit();
    }
})

后端:

import os
from django.http import StreamingHttpResponse

def send_zipfile(request):
    # 判断下载文件是否存在
    if not os.path.isfile(r'C:\Users\yongh\Desktop\mod_result.zip'):
        return HttpResponse("Sorry but Not Found the File")

    def file_iterator(file_path, chunk_size=512):
        """
        文件生成器,防止文件过大,导致内存溢出
        :param file_path: 文件绝对路径
        :param chunk_size: 块大小
        :return: 生成器
        """
        with open(file_path, mode='rb') as f:
            while True:
                c = f.read(chunk_size)
                if c:
                    yield c
                else:
                    break

    try:
        # 设置响应头
        # StreamingHttpResponse将文件内容进行流式传输,数据量大可以用这个方法(.pdf,.mp3,.mp4等等什么样格式的文件都可以下载)
        response = StreamingHttpResponse(file_iterator(r'C:\Users\yongh\Desktop\mod_result.zip'))
        # 以流的形式下载文件,这样可以实现任意格式的文件下载
        response['Content-Type'] = 'application/octet-stream'
        # Content-Disposition就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名
        response['Content-Disposition'] = 'attachment;filename={file_name}{format}'.format(
            file_name='my_zip', format=".zip")
    except:
        return HttpResponse("Sorry but Not Found the File")

    # 在这里千万记得return,否则不会出现下载
    return response

相关文章

网友评论

      本文标题:django实现下载zip压缩包--亲测有效

      本文链接:https://www.haomeiwen.com/subject/pgrcahtx.html