iframe+servlet上传文件显示进度(不使用session)

先看图:

      csdn不给传,气啊!不传了。

原理:

      使用了servlet,2个iframe,commons-fileupload的组件。2个iframe比较传统一个是上传文件数据,一个是更新页面进度条的。因为如果文件超大的话,在文件数据没有传完之前是不能回写数据的,所以一个iframe不行的。我这里没有使用session保存进度数据,我在网上看到不少的实现都是用session,最近在看rest觉得session不太符合rest风格。

      我是利用线程+同步hashmap是实现的。 具体是这样的,页面2个iframe首次的请求不是传文件请求,利用一个iframe的src属性请求到servlet没有什么参数.这个iframe也是以后更新页面进度条的iframe.在这次请求中,构造进度条监听器,产生一个唯一的字符串作为key,映射到这个监听器对象。然后呢,把利用iframe push js脚本调用客户端的另一个iframe上传文件,并且把key发回去作为参数传回来。这时候要阻塞当前线程利用循环就可以了。 第二个上传线程来的时候,获取key,从同步hashmap中得到监听器,把监听器给上传线程的commons-fileupload的对象。这样两个线程就能通过监听器对象通信进度数据了。最后在阻塞的那个iframe中不断的push脚本更新页面就可以了。

    测试了ie,firefox,chrome的都可以除了ie有点呆,多线程也测了ok的。下面看代码,很简单就一个页面一个servlet。

     

     

总结:

      1. 在ie中document.frames['name'].src 和windows.frames['name'].src的赋值都是没有权限的。只有用

          document.getElementById(' ').src可以的。

      2.  在servlet中response.getWriter().flush();是不能让IE做出反应的,除非response.getWriter().close().或者回

           写的字节流要够多才行的。

      3. form的enctype="multipart/form-data"的时候,如果在url后用?带参数的话,在后request,getParametes("")

          还是能取到?后面带的参数的,并且from表单里没有这个参数。

      4. 在servlet里缓存request和response充满了不确定性的,因为servlet的结束了request和resposne也发生了变

          化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值