Django가 대용량 파일 다운로드 요청에 응답

Django가 대용량 파일 다운로드 요청에 응답
과정과 코드를 간단하게 기록한다. 1. zip 파일로 압축한다.2. 블록별로 zip 파일을 읽고 반환
import os
import zipfile
from django.http import StreamingHttpResponse

def send_zipfile(path, suggestName):
    def file_iterator(file_name, chunk_size=512):
        with open(file_name, 'rb') as f:
            while True:
                c = f.read(chunk_size)
                if c:
                    yield c
                else:
                    break

    def zipfolder(path, zipfileName):
        tmp = os.path.join(path, zipfileName)
        archive = zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED)
        for d in os.listdir(path):
            fp = os.path.join(path, d)
            if fp != tmp and os.path.isfile(fp):
                archive.write(fp, d)
        archive.close()
        return tmp

    the_file_name = zipfolder(path, '%s.zip' % suggestName)
    response = StreamingHttpResponse(file_iterator(the_file_name))
    response['Content-Type'] = 'application/zip'
    response['Content-Disposition'] = 'attachment;filename="%s.zip"' % suggestName
    return response

좋은 웹페이지 즐겨찾기