5

タスクは簡単です。サーバー側 (python) で、アップロードされたファイルとその他のフォーム パラメータを含む HTTP POST を受け入れます。

アップロード進行状況インジケーターを実装しようとしているため、ファイル コンテンツをチャンクごとに読み取ることができる必要があります。

私が見つけたすべてのメソッドは cgi.FieldStorage に基づいています。これは、どうにかしてファイル全体を取得することしかできません (メモリ内にあり、それ自体が惨事です)。FieldStorage.make_file method() を再定義するようにアドバイスする人もいますが、これは cgi の実装を壊しているようです (奇妙な...)。

現在、wsgi入力全体をチャンクごとにファイルシステムに読み取ることができ、次のデータが得られます。

-----------------------------9514143097616
Content-Disposition: form-data; name="myfile"; filename="inbound_marketing_cartoon_ebook.pdf"
Content-Type: application/pdf

... 1.5 MB of PDF data

-----------------------------9514143097616
Content-Disposition: form-data; name="tid"

194
-----------------------------9514143097616--

このことを確実に解析できるPythonライブラリがあるかどうかは誰にもわかりませんか? または、これを手動で行う必要がありますか?(つまり、Python 2.5)

ありがとう。

4

3 に答える 3

2

あなたが示唆したように、私はオブジェクトのmake_fileメソッドをオーバーライドします(以前にも行っていました)。データを (ファイルまたはメモリまたは what-have-you に) 受け取り、進行状況インジケーター用に受け取った量を追跡するメソッドFieldStorageを持つオブジェクトを返すだけです。write

このようにすると、ファイルの長さ (クライアントから提供されたもの)、ファイル名、およびファイルがポストされたキーにもアクセスできます。

これが CGI の実装を壊しているように見えるのはなぜですか?

もう 1 つのオプションは、Flash アップローダー ( YUI UploaderSWFUploadが思い浮かびます) を使用してブラウザーで進行状況の追跡を行い、サーバーでの追跡を完全にスキップすることです。その後、進行状況を取得するために一連の AJAX リクエストを行う必要はありません。

于 2009-10-11T20:01:45.120 に答える
1

直感に反しているように見えますが (モジュールの名前が不適切だと思います)、emailおそらくあなたが望むことをするでしょう。私は使ったことがありませんが、同僚が電子メール処理システムに使用しています。これらのメッセージは本質的に単に RFC 2822 であるため、emailおそらくそれらを解析します。

のドキュメンテーションemailは、一見すると非常に完全です。

私の直感では、メモリ内のファイルで終わる可能性が高いと言えますが、あなたは悔しさを表明しました.

于 2009-10-11T19:55:56.663 に答える
0

Django が行ったことを確認することをお勧めします。カスタム ファイル アップロード ハンドラの非常に優れた実装があり、サブクラス化してプログレス バーなどを有効にすることができます。ドキュメント関連コードを参照してください。Django を使用したくない場合でも、必ずいくつかのアイデア。

于 2009-10-11T20:48:41.767 に答える