django中文件下载(HttpResponse)

      最近一个用django开发的web项目要进行数据的导入导出,所以有必要了解下。

     django中主要用HttpResponse将请求结果返回给浏览器,所以文件的下载也是通过改对象进行处理的,具体的一个列子的代码如下:

     

#文件下载
def download(request):
    """                                                                          
    Send a file through Django without loading the whole file into               
    memory at once. The FileWrapper will turn the file object into an            
    iterator for chunks of 8KB.                                                  
    """ 
    
    #读取mongodb的文件到临时文件中
    fileid_=request.GET["fileid"]
    filepath_ = ('%s/%s'%(MEDIA_ROOT, fileid_)) #文件全路径
    file_=TFiles.objects.get(fileid=int(fileid_))
    filename_=file_.filename
    filetype_=file_.filetype

    if os.path.isfile(filepath_):
        pass
    else:
        mongoLoad(fileid_)
    
    #下载文件
    def readFile(fn, buf_size=262144):#大文件下载,设定缓存大小
        f = open(fn, "rb")
        while True:#循环读取
            c = f.read(buf_size)
            if c:
                yield c
            else:
                break
        f.close()
    response = HttpResponse(readFile(filepath_), content_type='APPLICATION/OCTET-STREAM') #设定文件头,这种设定可以让任意文件都能正确下载,而且已知文本文件不是本地打开
    response['Content-Disposition'] = 'attachment; filename='+filename_.encode('utf-8') + filetype_.encode('utf-8')#设定传输给客户端的文件名称
    response['Content-Length'] = os.path.getsize(filepath_)#传输给客户端的文件大小
    return response


     

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值