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


     

你可能感兴趣的:(django)