zoukankan      html  css  js  c++  java
  • django中文件下载(HttpResponse)

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

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

         

    最近一个用django开发的web项目要进行数据的导入导出,所以有必要了解下。
    
         django中主要用HttpResponse将请求结果返回给浏览器,所以文件的下载也是通过改对象进行处理的,具体的一个列子的代码如下:
    
         
    
    [python] view plain copy
    #文件下载  
    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  
  • 相关阅读:
    状压dp(基础)
    JVM调优实战
    MySql5.6性能优化
    淘淘商城_day09_课堂笔记
    【剑指offer】找出数组中任意一个重复的数字,C++实现
    【剑指offer】字符串转换为数字,C++实现
    【剑指offer】圆圈中最后剩下的数字(约瑟夫问题),C++实现
    【剑指offer】扑克牌的顺子,C++实现
    【剑指offer】n个骰子的点数,C++实现
    android webview 漏洞背后的节操
  • 原文地址:https://www.cnblogs.com/crystaltu/p/9228454.html
Copyright © 2011-2022 走看看