2

フォームを送信するWebアプリケーションを作成しています(フィールドの1つはmulitpart / form-dataであるため、ファイルが非常に大きい可能性があるため、GETではなくPOSTを使用する必要があります)。フィールドの1つは一種のtransaction/upload_idであり、もう1つは明らかにファイルの内容です。アップロード中は、プログレスバーを表示する必要があります。

既知の事実によると、パラメーターの順序は一般に未定義です。つまり、(ファイルコンテンツ/ upload_id)のいずれかが最初に来る可能性があります。

ファイルコンテンツを送信する前にブラウザにupload_idを送信させるための許容できる/推奨される方法はありますか?

それは正しい実装と見なされますか?upload_idが最初に来ることを期待するか、それとも問題を処理するためのより良い/最も一般的な/より正しい方法がありますか?その場合、いくつかの詳細を聞くのは素晴らしいことです。

更新:私のサーバー側言語はJava /Servlets3.0です

4

3 に答える 3

1

(フィルターを使用せずに)より良い答えは、POSTリクエストを発行する場合でも、URLの一部として(「?」の後)upload_idを公開することです。その場合、それらは常にファイルの内容よりも先に処理されます。

于 2011-05-08T10:29:27.763 に答える
0

パラメータが送信される順序について心配する必要はありません。その場合、サーバー側のコードは非常に脆弱です。

マルチパートリクエストには、渡されるすべてのフォームフィールドのフィールド名が含まれます。この名前を使用して、送信された順序に関係なく、そのフィールドを参照します。

投稿の本文を手作業で解析している場合は、それを抽象化するApacheFileUploadなどの既存のプロジェクトを確認することをお勧めします。

于 2011-05-07T23:45:28.797 に答える
0

サーブレットも使用しており、私の場合は、ファイルのストリーミングを開始する前にサーブレットでCSRFフィルターを実行したいと考えていました。フィルターが失敗した場合は、20GBのビデオファイルをアップロードする前にリクエストを強制終了できます。サーバーがリクエスト全体を解析した後にのみスクリプトにヒットするデフォルトのPHP実装。

それは私の側では少しハックでしたが、これをしなければならなかったいくつかのケースでは、ファイル以外のリクエストパラメータをURLに入れて、すべての場合に(ほとんどすべてのブラウザを使用して)サーバー上の要求パラメーターに対するイテレーター(ストリーミングモードでcommons fileuploadを使用しています)でテストしたところ、ファイルデータを受信する前に、最初に非ファイル要求パラメーターを受信しました。やや壊れやすいですが、実行不可能ではありません。

最後のアイテムとしてファイルを使用してリクエストパラメータを注文した場合も<input>、同じ動作が得られると思います。

于 2011-05-08T06:33:16.277 に答える