您现在的位置: 爱51代码网 >> 范文 >> 文章正文
Struts2文件上传进度条

按照网上大神们的做法,一步步实现的,可是为什么总是不能成功呢。那么要是有兴趣也试试看啊。
下面我贴出原文:
   原理:
     利用Ajax在客户端一直查询服务器端的上传进度,取得进度的状态文本信息(xml,json格式的文本等),然后利用JS解析,显示在前台。
     在Struts2. 0中,框架事先已经定义一种监听器:ProgressListener(进度监听器),里面有一个update(long readedBytes, long totalBytes, int currentItem)方法,其中,readedBytes是已经上传到服务器的位数,而totalBytes是上传文件总位数.当文件已二进制的方式上传时,每上传一部分数据,就会调用这个方法一次。故要实现监听进度,必须实现这个接口,并实现update方法,在update方法中保存这个进度到session。当客服端需要进度的信息时,只需要访问某个action,在这个action中读取session中保存的进度状态就可以了.
   上传文件可大致分为两个阶段:1. 上传到服务器上,在临时目录中 2.从临时目录中把文件移到指定目录(由自己写的action处理),而struts2.的监听器只监听第一阶段。
  
实现:
(源代码下载: http--download.csdn-net/source/3568014)
第一步:
    实现ProgressListener接口,实现update( )方法,详情见action包中的FileUploadListener.java 文件,里面有一个自定义的类:State ,它描述的是进度的状态,详情请看State注释。Update方法要做的就是不断地更新session中的state对象 

 
xml指定自己的文件上传解析类有错误
<constant name="struts.multipart.parser" value="requestParser" />

网上很多很多文章都是
<constant name="struts.multipart.handler" value="requestParser" />
可是这样就是不对。我想问问是那些网上的文章都是错误的还是struts2版本变了 引起的不同。
还有阁下为何如此厉害 怎么学的

这样修改过后是可以执行了。但是为什么我action里面拿到的进度总是100% 我输出了一下,发现其先执行监听类,等监听类里面文件进度为100%的时候,才会去调用我的获取进度条的action 方法,请问这个该如何解决??
你取进度的action应该是另一个action。因为struts2文件上传的时候你到文件action的时候其实文件已经传到服务器了。不知道你前台是怎么传的建议使用jquery.form.js的ajaxSubmit来传输文件。这样可以异步传输。此时你ajax请求取进度的action应该在文件上传之前就要用js的setInteval每多少时间就去取。如果你等文件上传的请求到达action的时候文件其实已经传完了所以你取到的进度一直都是100%。当然这里小文件的话会传输太快建议用大点的文件才能看出效果
补充下如果用小文件也可以看出效果就是在你监听器中每次都让线程sleep下也就是增加Thread.sleep(1000)每次解析都睡眠一秒这样10MB左右的文件也能看出进度条的效果

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    SharePoint 2013 Search REST AP
    SharePoint如何搜索指定的爬网内
    weblogic Servlet: "action" fai
    webdav 与exchange通信失败未找到
    SharePoint2013文档库可以直接存
    Unable to write data to the tr
    asp.net中listbox的items.count属
    C#不是每次查询数据是不是被缓存
    ASP.NET发布后能加载引用的js文件
    Hadoop2.2.0在eclipse控制台没有
    SharePoint 2013 Search REST AP
    SharePoint如何搜索指定的爬网内
    weblogic Servlet: "action" fai
    webdav 与exchange通信失败未找到
    SharePoint2013文档库可以直接存
    Unable to write data to the tr
    asp.net中listbox的items.count属
    C#不是每次查询数据是不是被缓存
    ASP.NET发布后能加载引用的js文件
    Hadoop2.2.0在eclipse控制台没有
    No mapping found for HTTP 
    如何让tomcat7.0.42版本承受
    java的Openoffice如何将docx
    java进程执行按照先后次序执
    ava poi 如何打开加密excel
    A Hashmap中有10个数,B Has
    spring MVC 解析xml失败The 
    mysql查询出数据后如何选择匹
    文件字节流是如何把字节转换
    To display the auto-config
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |