django에서 파일 다운로드(HttpResponse)

1582 단어 django
최근django로 개발된 웹 프로젝트는 데이터의 가져오기와 내보내기를 진행하기 때문에 이해할 필요가 있습니다.
django에서는 주로 Http Response로 요청 결과를 브라우저에 되돌려주기 때문에 파일의 다운로드도 대상을 바꾸어 처리됩니다. 구체적인 열의 코드는 다음과 같습니다.
     
#    
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

좋은 웹페이지 즐겨찾기