2
からファイルをダウンロードします。http://code.runnable.com/UiIdhKohv5JQAAB6/how-to-download-a-file-generated-on-the-fly-in-flask-for-pythonは、私は、次のURLで確認作業のコードを作成しようとしているフラスコベースのPythonサーバー
私の目標は、ときに、Webブラウザ上でファイルをダウンロードできるようにすることですFlaskベースのPythonサーバー上のWebサービスへのユーザーアクセス。
だから私は、次のコードを書いた:
@app.route("/api/downloadlogfile/<path>")
def DownloadLogFile (path = None):
if path is None:
self.Error(400)
try:
with open(path, 'r') as f:
response = make_response(f.read())
response.headers["Content-Disposition"] = "attachment; filename=%s" % path.split("/")[2]
return response
except Exception as e:
self.log.exception(e)
self.Error(400)
をしかし、このコードが動作するようには思えません。
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\gevent\pywsgi.py", line 508, in handle_one_response
self.run_application()
File "C:\Python27\lib\site-packages\geventwebsocket\handler.py", line 88, in run_application
return super(WebSocketHandler, self).run_application()
File "C:\Python27\lib\site-packages\gevent\pywsgi.py", line 495, in run_application
self.process_result()
File "C:\Python27\lib\site-packages\gevent\pywsgi.py", line 484, in process_result
for data in self.result:
File "C:\Python27\lib\site-packages\werkzeug\wsgi.py", line 703, in __next__
return self._next()
File "C:\Python27\lib\site-packages\werkzeug\wrappers.py", line 81, in _iter_encoded
for item in iterable:
TypeError: 'Response' object is not iterable
私は最後のバージョンではなく、成功せず、私のフラスコとWERKZEUGパッケージを更新:確かに私は修正するために管理していなかったエラーを取得します。
誰かがアイデアを持っているなら、それはすばらしいでしょう。この問題を解決する最良の方法は、フラスコ内ですでに定義済みのヘルパー関数send_file()
を使用することです事前
? – donkopotamus
ファイルを動的に生成していない場合は、 'flask.send_file()'を使わないのはなぜですか? –
ベストプラクティスを動的に生成していても、ファイルをディスクに保存してから、Webサーバーがフラスコよりもはるかに効率的にファイルを処理できるため、Apacheまたはnginxを使用してファイルを提供します。 –