5

Apache FileUpload ライブラリを使用するには 2 つの方法があります。

ファイルアップロード

http://commons.apache.org/fileupload/using.html

およびストリーミング FileUpload API

http://commons.apache.org/fileupload/streaming.html

ストリーミング API には、ストリームを処理する前に fileSize をチェックする方法がないように見えることを除いて、どちらもうまく機能します。

これは、ストリーミング API が基本的にファイル サイズを認識していないためですか、それともマルチパート アップロード サイズを取得するためにいくつかのヘッダーまたは何かを手動で読み取る必要があるためですか?

4

1 に答える 1

14

HTTPリクエストの本文全体を消費せずに、マルチパートリクエストの一部のサイズを知る方法はありません。また、HTTPリクエスト本文の消費が開始されると、途中で消費を停止することはできません。応答が返される前に、最後のバイトまで消費される必要があります。これがHTTPとTCP/IPの性質です。ただし、サーバーのメモリ使用量を低く抑えるために、読み取りバイトがサイズを超えた場合は破棄することができます(つまり、読み取りループ内でチェックし、変数に割り当てないでください)。

最善の策は、アップロードが行われる前にJavaScriptでファイルの長さを検証することです。これは、HTML5APIをサポートするブラウザでサポートされていますFile。Firefox、Chrome、Safari、Opera、Androidの現在のバージョンはそれをサポートしています。IE9はまだサポートしていませんが、将来的にはIE10でサポートされる予定です。

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

checkFileSize()このように見えるところ

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; // Clear the field.
    }
}
于 2012-05-10T18:01:42.660 に答える