如果不消耗整个 HTTP 请求正文,就无法知道多部分请求的一部分的大小。而且一旦开始消费 HTTP 请求体,就不能中途停止消费。它必须被消耗到最后一个字节才能返回响应。这就是 HTTP 和 TCP/IP 的本质。但是,为了保持服务器内存使用率低,您可以在读取字节超过大小时丢弃它们(即在读取循环中检查它并且不要将它们分配给任何变量)。
最好的办法是在上传之前在 JavaScript 中验证文件长度。这在支持HTML5 File
API 的浏览器中受支持。当前版本的 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.
}
}