There's no way to know the size of a part of a multipart request without consuming the whole HTTP request body. And once the consuming of the HTTP request body has started, you cannot stop consuming it halfway. It has to be consumed until the last byte before a response can ever be returned. That's just the nature of HTTP and TCP/IP. To keep the server memory usage low, you can however just discard the read bytes when they exceeds the size (i.e. check it inside the read loop and don't assign them to any variable).
Your best bet is to validate the file length in JavaScript before the upload takes place. This is supported in browsers supporting HTML5 File
API. The current versions of Firefox, Chrome, Safari, Opera and Android support it. IE9 doesn't support it yet, it'll be in the future IE10.
<input type="file" ... onchange="checkFileSize(this)" />
Where the checkFileSize()
look something like 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; // Clear the field.
}
}