Ответ 1
Вы запускаете флеш-приложение за внешним веб-сервером, таким как nginx или apache (что было бы лучшим способом обработки загрузки файлов). Если вы используете nginx, вы можете использовать заголовок 'X-Accel-Redirect'. В этом примере я буду использовать каталог /srv/static/reports
в качестве каталога, в котором вы создаете zip файлы и хотите их обслуживать.
nginx.conf
в разделе server
server {
# add this to your current server config
location /reports/ {
internal;
root /srv/static;
}
}
ваш метод колбы
отправить заголовок на nginx на сервер
from flask import make_response
@app.route('/download', methods=['GET','POST'])
def download():
error=None
# ..
if request.method == 'POST':
if download_list == None or len(download_list) < 1:
error = 'No files to download'
return render_template('download.html', error=error, download_list=download_list)
else:
timestamp = dt.now().strftime('%Y%m%d:%H%M%S')
zfname = 'reports-' + str(timestamp) + '.zip'
zf = zipfile.ZipFile(downloaddir + zfname, 'a')
for f in download_list:
zf.write(downloaddir + f, f)
zf.close()
# TODO: remove zipped files, move zip to archive
# tell nginx to server the file and where to find it
response = make_response()
response.headers['Cache-Control'] = 'no-cache'
response.headers['Content-Type'] = 'application/zip'
response.headers['X-Accel-Redirect'] = '/reports/' + zf.filename
return response
Если вы используете apache, вы можете использовать свою директиву sendfile http://httpd.apache.org/docs/2.0/mod/core.html#enablesendfile