2014-10-22 2 views
3

Я ищу способ отправки zip-файла клиенту, который генерируется из ответа на запрос. В этом примере я отправляю строку JSON на url, который возвращает zip-файл преобразованной строки JSON.Flask: как отправить динамически генерируемый zip-файл клиенту

@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'}) 

Но мой почтовый файл пуст, и ошибки, возвращаемой колба

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, конечно, не знает, что делать с этим объектом.

Смежные вопросы