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.
}
}