2

これは非常に具体的な質問です。FileUpload API について十分な知識を持っている人がここにいることを願っています。

この API を使用したことがある場合は、ファイルの最大サイズを超えると、FileSizeLimitExceededException がスローされるため、次の項目を読み取ることができず、hasNext()メソッドをもう一度呼び出して次の項目に反復することを試みることを知っておく必要があります。入力ストリームが閉じられ、再度読み取ろうとすると、IOException がスローされます。

次のパラメータを読み取ることができないため、このシナリオは非常に悪いです。次のフォームを想定します。

<form action="..." method="post" enctype="multipart/form-data">
    <input type="hidden" name="param1" value="foo"/>
    <input type="file" name="myFile"/><br/>
    <input type="hidden" name="param2" value="bar"/>
    <input type="submit"/>
</form>

現在、ファイルは最大サイズを超えています。結果:
「param1」が読み込まれます。
「myFile」は FileSizeLimitExceededException を生成します。
「param2」は読み込まれません。

次の項目 (この場合は「param2」) を読みたいので、API の一部を書き直そうとしていますが、うまくいきませんでした。

誰も同じ問題を抱えていますか?どのように修正しましたか?

ありがとう。


編集:まあ、BalusC によって提案されたソリューションを実装しました。将来のために:
FileUpload ラッパー
FileUpload ラッパーの使用法

このラッパーに他に何か必要があると思われる場合は、それを言ってください。理想はAPI自体を変更して修正することであるため、私はそれを実際の解決策として受け入れません。

4

1 に答える 1

1

API をハッキングしない方法は、アップロード ファイルのサイズ制限を「無制限」に設定し、その後、アップロード ファイルのサイズを自分で調べることFileItem#getSize()です。最初にファイル全体を完全に読み取る必要があるため (ただし、後続のすべての項目を取得するにはとにかくそれを行う必要があります)、エンドユーザーがそれに関するフィードバックを得るまでに時間がかかる場合があります。

まったく別の方法として、リクエストが実際に送信される前に JavaScript を使用してファイル サイズを調べる方法を提供する新しいHTML5 FileAPIを確認することをお勧めします。

var size = document.getElementById("fileFieldId").files[0].size;
// ...
于 2011-09-17T14:27:33.993 に答える