论坛首页 Java企业应用论坛

java 限制附件上传大小

浏览 23158 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (11) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-05-20   最后修改:2010-05-21
在Java中在不用javascript验证附近大小 和 配置服务器的前提下
如何限制上传附件的大小
我尝试了市面上的附件限制
基本都是在文件流上传到服务器端的临时文件之后进行限制大小
并没有实际上限制

举个例子 如果我上传一个38G的 阿凡达 如果我的速度为500K/s
那么理论上服务器端将在1天之后告诉你 附近上传超过限制大小。。

现在想做出一种有效率的方法去限制大小
有没有谁 有过相关的开发思路。。。

这是我在javaeye上传一个 改成jpg后缀的一个win7的iso  2G多
点完浏览直接就 无法显示网页。。

我读取contentlength 的情况
我上传了一个win7的iso 2G 一个1K字的textarea


  • 大小: 9 KB
  • 大小: 18.5 KB
   发表时间:2010-05-20  
你可以尝试在接受单个文件超过限制的时候提示,这样就不必等文件都上传完再检查了
0 请登录后投票
   发表时间:2010-05-20  
defty 写道
你可以尝试在接受单个文件超过限制的时候提示,这样就不必等文件都上传完再检查了

我说的就是单个文件超过大小
我说的等上传完也暂时指的是一个文件 。。
要是多个上传更麻烦。。(单个都没解决 就先不想多个的了。。)
0 请登录后投票
   发表时间:2010-05-20  
没办法。
用activex,falsh或者applet。
0 请登录后投票
   发表时间:2010-05-20  
用控件的话就程序很不容易普及  客户端还要修改或安装某些插件。。
0 请登录后投票
   发表时间:2010-05-20   最后修改:2010-05-20
在分析数据流的时候就可以发现超过大小限制了。
比如你限制了文件大小为2m,当在上传到2m时你可以直接抛异常。
不需要等到文件全部上传完毕。

多个文件其实好解决,分析到 Content-Length 的时候就可以断开了。

Content-Type: multipart/form-data; boundary=---------------------------10199115674208 
Content-Length: 347562961 
-----------------------------10199115674208 
Content-Disposition: form-data; name="action" 

edit 
-----------------------------10199115674208
Content-Disposition: form-data; name="id"

3 
blah…blah…blah…
0 请登录后投票
   发表时间:2010-05-20  
如何分析数据流大小。。
详细说下把。。
0 请登录后投票
   发表时间:2010-05-20  


request.getContentLength(); // 获取整体数据大小,如果你想判断所有文件大小之和用这个就够了。
request.getInputStream(); // 获取上传流

从上传流中获取到的数据可能如下(HttpUnit的filename会返回绝对路径,一般浏览器不会这么干):
----HttpUnit-part0-aSgQ2M
Content-Disposition: form-data; name="bugFile"; filename="/uploadtest/bug.png"
Content-Type: image/png

PNG image content…………

----HttpUnit-part0-aSgQ2M
Content-Disposition: form-data; name="email"
Content-Type: text/plain; charset=iso-8859-1

some@example.Com
----HttpUnit-part0-aSgQ2M
Content-Disposition: form-data; name="name"
Content-Type: text/plain; charset=iso-8859-1

hello
----HttpUnit-part0-aSgQ2M--


例如我们分析到 bug.png 的内容了也就是 Content-Type: image/png之后。
这时我们is.read多少字节就计算多少字节,当计算出来的字节数一超过限制就进行throw。
这样做不好的地方在于后面的字段也就不能分析了。
如果你单为了节约服务器资源,可以将超过的部分不写入临时文件。

格式详情参见:http://www.ietf.org/rfc/rfc1867.txt
网上分析上传流的代码很多……我就不见献丑了。
0 请登录后投票
   发表时间:2010-05-20  
第三方控件:fileupload呢
0 请登录后投票
   发表时间:2010-05-20  
用swfupload,flash上传组件,直接限制不能上传
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics