繁体   English   中英

在Apache FileUpload Streaming API中读取之前确定文件上载的大小

[英]Determine the size of a file upload before reading it all in in the Apache FileUpload Streaming API

有两种方法可以使用Apache FileUpload Library。

上传文件

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

和Streaming FileUpload API

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

它们都很好用,除了流API在处理流之前似乎没有办法检查fileSize。

这是因为Streaming API从根本上不知道文件大小,还是因为我需要手动读取一些标题或其他内容来获取Multipart上传大小?

在不占用整个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.
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM