7

複数のファイルをアップロードするためのファイル アップロード ハンドラがあり、MAX_CONTENT_SIZE を設定しました。ドキュメントには、合計ファイル サイズが制限を超えると Flask が 413 例外をスローすることが記載されているため、カスタム 413 ページを使用して 413 エラー ハンドラーも作成しました。ただし、ファイルのアップロードをテストすると、413 エラーが確実にスローされることがわかりますが、エラー ページが表示されるのではなく、毎回接続が切断されているようです。参考までに、現在、Flask dev サーバーを使用しています。

コード:

app.config['MAX_CONTENT_LENGTH'] = 50 * 1024 * 1024    # 50 Mb limit

@app.route('/upload', methods=['POST'])
def upload_files():
    if request.method == 'POST':
       uploaded_files = request.files.getlist('uploaded_files[]')

       # do some stuff with these files



@app.errorhandler(413)
def error413(e):
    return render_template('413.html'), 413

アップデート:

奇妙なことに、この問題は Flask 開発サーバーを使用している場合にのみ発生するようです。Apache でテストしていますが、413 エラー ページは問題なく表示されます。

4

1 に答える 1

2

実稼働 WSGI サーバーを使用すると、この問題が解決されます (例: GunicornWaitress )。以下は、この問題の簡単なタイムラインです。

2015年

Armin Ronacher が投稿したこのスニペット (なくなった) で、彼は次のように述べています

着信 POST 要求で .form または .files にアクセスしなくなった場合、一部のブラウザーは接続リセット メッセージでこれを尊重することに気付くかもしれません。これは、特定のサイズより大きいアップロードを拒否し始めた場合に発生する可能性があります。

この問題を解決する WSGI サーバーもあれば、解決しないものもあります。たとえば、組み込みの Flask Web サーバーは非常に機能がなく、この問題を修正しようとしません。

2018年

Flask のファイル アップロード ドキュメントにヒントを追加しました (フラスコ #2662 ):

接続リセットの問題

ローカル開発サーバーを使用している場合、413 応答ではなく、接続リセット エラーが発生する場合があります。実稼働 WSGI サーバーでアプリを実行すると、正しいステータス応答が得られます。

2021年

近い将来、Werkzeug で修正されると思います ( werkzeug #1513 )。

于 2021-02-17T13:58:21.970 に答える