2014-10-22 3 views
3

요청 응답에서 생성 된 클라이언트에 zip 파일을 보내는 방법을 찾고 있습니다. 이 예에서는 변환 된 JSON 문자열의 zip 파일을 반환하는 url에 JSON 문자열을 보냅니다.Flask : 동적으로 생성되는 zipfile을 클라이언트에 보내는 방법

@app.route('/sendZip', methods=['POST']) 
def sendZip(): 
    content = '{"type": "Point", "coordinates": [-105.01621, 39.57422]}' 
    data = {'json' : content} 
    r = requests.post('http://ogre.adc4gis.com/convertJson', data = data) 
    if r.status_code == 200: 
     zipDoc = zipfile.ZipFile(io.BytesIO(r.content)) 
     return Response(zipDoc, 
       mimetype='application/zip', 
       headers={'Content-Disposition':'attachment;filename=zones.zip'}) 

하지만 내 zip 파일은 비어 있고 플라스크에 의해 반환되는 오류가

Debugging middleware caught exception in streamed response at a point where response 
headers were already sent 
+0

** ** https://stackoverflow.com/questions/27337013/how-to-send-zip-files-in-the-python-flask-framework – dreftymac

답변

6

당신은 파일 직접 아닌 ZipFile() 개체를 반환해야합니다 수 있습니다 :

r = requests.post('http://ogre.adc4gis.com/convertJson', data = data) 
if r.status_code == 200: 
    return Response(r.content, 
      mimetype='application/zip', 
      headers={'Content-Disposition':'attachment;filename=zones.zip'}) 

응답을 당신은 정말로 zipfile입니다. 그러나 Python을 파싱하고 압축을 푼 내용을 제공 할 필요는 없습니다. Flask는 확실히 무엇을해야할지 모르겠습니다. 그 물건으로해라.

관련 문제