浏览器上传大文件的尴尬

想上传超过1G的文件?

 


先来解读浏览器上传大文件的实际表现

 

1. IE 上传 1G 文件时,得到的Conent-Length 是不准确,上传3G,Content-Length 变为负数了。 囧

2. FireFox 添加后,点击提交没有反应。

 

 

再来看看标准协议  rfc1867.txt    里面有几点是关键内容      

 

1. 上传的表单编码 必须是 multipart/form-data

2. 上传多个文件时格式有2种,一种是

 

 Content-type: multipart/form-data, boundary=AaB03x

 --AaB03x
 content-disposition: form-data; name="field1"

 Joe Blow
--AaB03x
  content-disposition: form-data; name="pics"; filename="file1.txt"
        Content-Type: text/plain

... contents of file1.txt ...
--AaB03x--

 

另一种是

Content-type: multipart/form-data, boundary=AaB03x

        --AaB03x
        content-disposition: form-data; name="field1"

        Joe Blow
        --AaB03x
        content-disposition: form-data; name="pics"
        Content-type: multipart/mixed, boundary=BbC04y

        --BbC04y
        Content-disposition: attachment; filename="file1.txt"

 

IE 采用的是第一种,

 

 

 Java 实现注意的地方

 

1. Common-FileUpload  
是个专门用来处理上传的公共包,里面有个 MultipartStream  可以直接用来解析协议内容。

2. 注意的是,需要要解析大文件流,不能设置Conent-Length,将此值设置为 -1 即可。如

3. 得到上传的文件名如果乱码,是因为设置的编码不对,需要设置为GBK编码。

最后,贴一下 用 JBoss Netty 实现的上传

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值