3

ユーザーが Web ブラウザーを使用してサーバーに PDF をアップロードできるようにする Web ツールを作成しています。サーバーは Python (Paste + Pyramid) に基づいています。

私が現在抱えている問題は次のとおりです。ユーザーがかなり大きなファイル (100 MB としましょう) をアップロードし、アップロードが完了する前にアップロードをキャンセルした場合、サーバー上のハンドラー コードは引き続き呼び出されます (リクエストが中止されるのではなく)。 )。

問題は、request.POST['myfile'].fileそれが起こったときに が不完全であることです。これは、サーバー上のどこかに単純に書き込むと、PDF ファイルが破損していることを意味します。

サーバーのログを見ると、Paste サーバー内に「壊れたパイプ」の例外が表示されます。ただし、その例外をキャッチして、ビュー/ハンドラーコードが不完全なファイルを実行および保存するのを防ぐ方法がわかりません。

4

2 に答える 2

2

パスター HTTP サーバーは、アップロードされたフォーム データを正しく検証せず、接続 (HTTP POST) がユーザーによって閉じられた場合でも、単に要求を WSGI パイプラインに渡すだけのようです。

リバース プロキシとして機能するようにNGINXを設定するだけで、この問題を回避しました。これにより、paster よりもテストされている可能性があるため、セキュリティ上の利点もいくつか追加されます。


アップデート:

私の主な問題は、runserver(manage.pyの組み込みWebサーバー)を使用していたことです。いくつかの試行錯誤の後、WSGI を使用することになりました。

より具体的には、uWSGINginxを Web サーバーとして使用します。静的コンテンツは Nginx によって直接提供されますが、動的ページは uWSGI を介してパイプされ、Python Web アプリによって処理されます。

于 2011-07-24T14:39:44.450 に答える
0

何か特別なこと (アップロードの進行状況の追跡など) を行っていない限り、pylons コントローラーはファイル全体がアップロードされるまで呼び出されるべきではありません。

于 2011-07-17T09:00:31.430 に答える