2016-08-11 6 views
0

나는 약 this question을 안다. 하지만 당신은 애플 리케이션 엔진 (shutil 또는 zipfile 파일을 생성해야합니다)의 파일 시스템에 쓸 수 없습니다.파이썬에서 파일 시스템에 아무것도 쓰지 않고 정적 폴더를 압축하거나 압축하는 방법은 무엇입니까?

그래서 기본적으로 내가 zip 또는 타르를 사용하여 /base/nacl 같은 것을 보관하고 페이지 를 요청하는 웹 브라우저에 출력을 쓸 필요가 (출력 32 메가를 초과하지 않습니다).

답변

1

단지 내가 오늘 밤에 똑같은 문제를 해결해야한다고 무슨 일이 있었 : 이것은 나를 위해 일한 :

import StringIO 
    import tarfile 

    fd = StringIO.StringIO() 

    with tarfile.open(mode="w:gz", fileobj=fd) as tgz: 
     tgz.add('dir_to_download') 

    self.response.headers['Content-Type'] ='application/octet-stream' 
    self.response.headers['Content-Disposition'] = 'attachment; filename="archive.tgz"' 

    self.response.write(fd.getvalue()) 

요점 :

  • 메모리
  • 에 가짜 파일에 StringIO을 사용
  • fileobj을 사용하여 가짜 파일의 개체를 tarfile.open()으로 직접 전달합니다 (도 지원됨)대신 gzip을 선호하는 경우)
  • 응답을 다운로드 할 수있는 파일로 제공하도록 헤더를 설정하십시오.