0

Tomcat Servlet コンテナーを内部で使用する JBoss 6.1 で実行される JSF アプリケーションがあります。

apache commons file upload でアップロードを実現しました。大きすぎるファイルのアップロードを防ぎたいので fileSizeMax、クラス内でプロパティを 10MB に設定しましたFileUploadBaseFileSizeLimitExceededExceptionファイルのアップロードは、 10MBを超えるすべてのファイルに対してスローします。この例外は 1 秒以内にスローされます。しかし、主な問題は、ファイル全体がネットワーク経由で転送されることです。これは、ネットワーク トラフィックをチェックすることでわかりました。その後、エラー ページへのリダイレクトが行われます。

ファイル全体を転送せずに最大サイズを超えたときにファイル転送を中断するにはどうすればよいですか? Web フォーム属性のため、ファイルは複数のパッケージで転送されると想定していますenctype ="multipart/form-data"

4

1 に答える 1

5

HTTP 要求を途中で中止することはできません。それを行った場合、HTTP 応答を返すことができず、クライアントは最終的に何のフィードバックも得られず、ブラウザ固有の「接続がピアによってリセットされました」というエラー ページが表示される可能性があります。

最善の策は、事前に JavaScript で検証することです。ちなみに、これはHTML5 FileAPIをサポートするブラウザーでのみ機能します。使用している JSF ファイル アップロード コンポーネントについて何も言わなかったので、自作しただけの印象があるので、レンダリングされた HTML に適用できる一般的な回答をします<input type="file">(たとえば、トマホークの場合<t:inputFileUpload>):

<input type="file" ... onchange="checkFileSize(this)" />

このようなもので

function checkFileSize(inputFile) {
    var max = 10 * 1024 * 1024; // 10MB

    if (inputFile.files && inputFile.files[0].size > max) {
        alert("File too large."); // Do your thing to handle the error.
        inputFile.value = null; // Clears the field.
    }
}

これをサポートしていない古いブラウザの場合は、どうしようもありません。最良の代替手段は、Flash またはアプレットです。

于 2013-01-25T14:36:35.003 に答える