Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Apache FileUpload流式API中读取所有文件之前,先确定文件上载的大小_Java_File Upload_Apache Commons Fileupload - Fatal编程技术网

Java 在Apache FileUpload流式API中读取所有文件之前,先确定文件上载的大小

Java 在Apache FileUpload流式API中读取所有文件之前,先确定文件上载的大小,java,file-upload,apache-commons-fileupload,Java,File Upload,Apache Commons Fileupload,有两种方法可以使用ApacheFileUpload库 文件上传 流媒体文件上传API 除了流式API似乎没有在处理流之前检查文件大小的方法之外,它们都工作得很好 这是因为流式API根本不知道文件大小,还是因为我需要手动读取一些标题或其他内容来获取多部分上载大小?如果不使用整个HTTP请求体,就无法知道多部分请求的一部分大小。一旦开始使用HTTP请求主体,就不能中途停止使用它。在返回响应之前,它必须一直使用到最后一个字节。这正是HTTP和TCP/IP的本质。但是,为了保持服务器内存使用率较低,

有两种方法可以使用ApacheFileUpload库

文件上传

流媒体文件上传API

除了流式API似乎没有在处理流之前检查文件大小的方法之外,它们都工作得很好


这是因为流式API根本不知道文件大小,还是因为我需要手动读取一些标题或其他内容来获取多部分上载大小?

如果不使用整个HTTP请求体,就无法知道多部分请求的一部分大小。一旦开始使用HTTP请求主体,就不能中途停止使用它。在返回响应之前,它必须一直使用到最后一个字节。这正是HTTP和TCP/IP的本质。但是,为了保持服务器内存使用率较低,您可以在读取字节超过大小时丢弃它们(即,在读取循环中检查它,不要将它们分配给任何变量)

最好的办法是在上传之前用JavaScript验证文件长度。这在HTML5API浏览器中是受支持的。当前版本的Firefox、Chrome、Safari、Opera和Android都支持它。IE9还不支持它,它将出现在未来的IE10中


其中,
checkFileSize()
如下所示

函数checkFileSize(inputFile){
var max=10*1024*1024;//10MB
if(inputFile.files&&inputFile.files[0].size>max){
警告(“文件太大”);//请尽力处理错误。
inputFile.value=null;//清除该字段。
}
}

请尊重巴卢斯。。。在服务器端,由于OP是在询问这一点,而不是在客户端(JS)。。。这不是检查的好方法。标题“内容长度”由客户端设置,不能或不应受信任。在服务器端,使用流式API加上来自头的“内容长度”,可以根据以下内容确定文件“可能”的大小:ContentLength(sum)-在多部分请求中到达文件项开始之前读取的头字节数。使用流式API,读取块和求和以防止上传过大。