`
bruce.lu
  • 浏览: 33062 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

DWR + FileUpload 多文件上传实例, 进度条 百分比 上传速度 文件大小...

    博客分类:
  • AJAX
阅读更多

WAR 包已更新, 修复中文乱码问题, 并采用了 Reverse Ajax技术

 

功能: 文件上传

特点: 动态显示进度, 百分比, 文件名, 文件长度, 上传速度... 剩下的自己看吧

主要技术: DWR, Apache commons FileUpload

原理: FileUpload实现上传功能, UploadListener 监听上传进度, DWR push (Reverse Ajax) 进度信息并更新页面, 实现无刷新多文件上传

运行环境: Tomcat 6, WAS 6 测试通过

 

WAR下载 见附件

 

 

顺便截个图:

 FileUpload demo

分享到:
评论
50 楼 renyuchuan 2012-04-23  
dyfh 写道
解决了,再次感谢楼主的分享

请问怎么解决的。。我看了半天没看懂呢。谢谢了
49 楼 dyfh 2011-12-12  
解决了,再次感谢楼主的分享
48 楼 dyfh 2011-12-12  
刚才我楼下讲得有些不对,不是FileItemIterator fIter = upload.getItemIterator(request);处出错,而是在UploadListener类里的下面代码处出错
if(pBytesRead + 2000 > pContentLength){
pi.setBytesRead(pContentLength);
sp.addFunctionCall("updateProgress", pi);
return;
}

如果注释掉sp.addFunctionCall("updateProgress", pi);,则小文件也可能单个正常上传,否则就会出错,博主有办法解决吗?
47 楼 dyfh 2011-12-12  
多谢楼主分享,但我还是有个问题。在下载部署文件后,发现如果只上传一个文件,且文件过小时,会报错。
-->> FileUploadServlet, cancelled or interrupted!
java.lang.NullPointerException

经查是servlet下面这句出错:
FileItemIterator fIter = upload.getItemIterator(request);

只传一个文件且文件小于4K时,必出。如果多文件上传或文件较大,就没有问题。

请问这是什么原因?如何解决?
46 楼 bruce.lu 2011-11-06  
yangkai 写道
好个屁啊。。你是学JAVA的吗?
源代码都不给个。。给个.war包.


不准随地大小.., .war里面明明有源码的。
45 楼 萧十一狼 2009-04-12  
<p>上传的文件保存在了Tomcat 5.5\temp目录下~&nbsp; <br /><span style="color: #ff0000;">&nbsp;File file = new File(this.getFileName(item.getName())); //这个路径Windows是: C:\Documents and Settings\Administrator\Local Settings\Temp</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (file.exists()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.delete();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStream out = new FileOutputStream(file);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bStream.writeTo(out);</p>
<p><br />&nbsp;怎么设置保存路径在我想要的地方, 我对操作流不太懂。</p>
44 楼 doltter 2009-02-16  
是否有源代码啊
43 楼 pc_funning 2009-02-11  
bruce.lu 写道

icewubin 写道

bruce.lu 写道

icewubin 写道
... 是这样的,HTTP长连接本质上相当于一个socket连接,如果采用HTTP长连接的方式最多就多占用一个socket连接,性能应该是可以接受的吧。Icewubin 兄弟说的也不无道理。 我们在多用户并发这个极端条件下采用HTTP长连接, N个用户就会占用N个socket连接。 Application Server 会不会 connection starving? 用户在上传的时候本身就是一个HTTP长连接,如果说为了界面友好,多占一个HTTP长连接而已。 多消耗一倍的资源而已,只是连接数资源,带宽占用很小。 就是一个简单的取舍问题,对吧。 先不管这个方案真的在极端情况下有多烂,但是至少是可用的,如果访问量真的可喜的达到极端情况了,那就可以考虑其他方案应对了。 如果用你现在的方案,很快就会达到极端情况,也就是说,不同的方案,并发数负载不一样。 Hi, Icewubin, 能否详细给出你能想到的最好的方案? 谢谢!

。。。
42 楼 yangkai 2009-02-07  
好个屁啊。。你是学JAVA的吗?
源代码都不给个。。给个.war包.

41 楼 victor_mamj 2008-11-19  
多用户同时上传的情况下怎么解决?
40 楼 zhangbosix 2008-11-09  
这个我在tomcat下访问没有问题,可是我把apache和tomcat整和之后再访问就问题了,弹出个 javascript的框"Not Found"!希望你看一下,我等待!
39 楼 bruce.lu 2008-10-24  
WAR 包已更新, 修复中文乱码问题, 并采用了 Reverse Ajax 技术
38 楼 sun0218 2008-10-24  
好东东, 学习学习
37 楼 bruce.lu 2008-10-23  
coolstar648 写道
楼主,问你个问题。
你这个包里用到的servlet是哪个版本的?我用了我的servlet架包后报错。

建议用tomcat6\lib\servlet-api.jar
这个可以的, 因为用这个测试过。
36 楼 bruce.lu 2008-10-23  
kaki 写道
Ext里面有一个现成的,做的很好楼主可以看看。

很久前见过Ext的上传组件, 就是个图片在那乱闪, 好像不能百分比显示。 有空再看看, 多谢了
35 楼 bruce.lu 2008-10-23  
icewubin 写道

...
这无非就是做选择题:

1.绝大多数的选择就是,像EXT的例子那样,做一个假的进度条,简单高效。(目前我们公司用的就是这种,背景是客户上传的都是小文件,不超过30K,即使进度条是假的,用户也发觉不了)

2.再加一个长连接,用来实时推送当前的真实进度。

3.如果第二种方式有技术难度或者多一个长连接也不能接受的话,建议直接使用Flex的文件上传组件,功能强大的非常多,还不用自己开发。

4.局域网使用,并发数不是很高的情况下,用楼主的代码也没有太大的问题。

都是出于开发成本的考虑,做的太简单不能应用到互联网上,做的太复杂,又不可能做的有Flex组件那样强,需要一个折中,不就是做选择题么。

1. 嗯, 假的也是个办法, 但碰到客户要求看到百分比的...
2. 这办法看来最可行, 但长连接在DWR里也是有几种选择的, 我个人觉得首先让Reverse Ajax enabled, 然后 A:如果觉得长连接可以接受, 用Full Streaming Mode 或 Early Closing Mode; B: 如果干脆不喜欢长连接, 用Polling Mode
3. Flex 需要客户端有flash player, 其实dojo新加的文件上传组件也是这样做的(也是我个人比较喜欢的),原理是javascript和flash交互, 这种方式还有个好处, 可以在客户端直接判断文件大小。 但对于brower端没有flash player的用户他就得安装。 不要笑, 我也知道flash player 在90%以上的browers里都安装了。注意:不是100%。 不知道你有没有碰到过那样的客户, 我碰到过: 他就需要seamless & smooth!
34 楼 bruce.lu 2008-10-23  
aaron2007 写道

呵呵很支持!但是测试了一些还有很多bug!因为对ext不熟悉,所以没有对程序进行修正不好意思!
1:传递中文的时候出现乱码。
2:有时候传递之后文件根本没有传递上去但是还有进度!

jstudio 写道

中文乱码问题。。。。。。

differsky 写道

楼主,在测试的时候有没有测试上传,有没有考虑上传文件或图片是中文命名,乱码问题,希望楼主改进一下......


不好意思, 最近在忙项目, 有段时间没上来了。 看到这么多哥们在关注, 心情不错, 谢谢哈!
1. 中文问题解决方案
ServletFileUpload upload = new ServletFileUpload();
upload.setHeaderEncoding("UTF-8");

2. Bug fix
刚好有点时间, 一会儿仔细看看。 Fix 后再重新上传 WAR 包

33 楼 bruce.lu 2008-10-23  
jacklan 写道

用DWR可以实现断点续传吗?

哥们, 这个俺没试过, 不过可以给一个关于断点续传的链接:
http://conkeyn.iteye.com/blog/239603
32 楼 bruce.lu 2008-10-23  
血之兽 写道

说的挺好的

说的好不好不重要, 也管不了别人怎么说。 但至少做了!
xzj127 写道

看了。。
      不好。。

重申下: 这只是个Demo, 目的是sharing和discussion。
BTW, 超喜欢 icewubin 的风格: 有问题, 有什么问题, 提出来, 大家一起探讨! 当然, 能像 icewubin 一样能给出解决方案就更好了!

31 楼 jacklan 2008-10-19  
用DWR可以实现断点续传吗?

相关推荐

Global site tag (gtag.js) - Google Analytics