struts2.3.4和struts2.3.15.1 Fileupload上传文件简单分析
2014-05-29 23:26
411 查看
struts2漏洞爆发,近日修补漏洞,struts2.3.4.1升级到struts2.3.15.1,发现以前用uploadFile能正常上传文件显示进度条现在不能正常工作了,List items = upload.parseRequest(request),items为空,得不到HttpServletRequest值了。
研究了一天,也在网上转了一天,终于得到灵感,查看了一下struts2.3.15.1的struts-default.xml配置文件,发现<constant name="struts.multipart.handler" value="jakarta" />已经变成了parser,在原来的项目中把struts.multipart.handler换成了struts.multipart.parser,一切OK,正常了。
配置完成了,就可以直接利用uploadFile中的监听器来完成文件上传进度的判断了和上传文件了。
这是struts2.3.15.1的默认配置
Struts2 中用Fileupload上传文件得不到HttpServletRequest值的解决办法
在status2 .3.4.1的配置方式
在status2 .3.4.1的配置文件里加上
这样就可以得到request里的item的值了。
struts2.3.15.1的配置方式
在struts2.3.15.1后的配置里,struts2的struts-default.xml 里把 struts.multipart.handler 改成了 struts.multipart.parser
在struts配置文件中
class
下面的片断Class是利用spring mvc做的一个上传文件Controller中的一个方法
转载于:http://my.oschina.net/guhai2004/blog/157852
研究了一天,也在网上转了一天,终于得到灵感,查看了一下struts2.3.15.1的struts-default.xml配置文件,发现<constant name="struts.multipart.handler" value="jakarta" />已经变成了parser,在原来的项目中把struts.multipart.handler换成了struts.multipart.parser,一切OK,正常了。
配置完成了,就可以直接利用uploadFile中的监听器来完成文件上传进度的判断了和上传文件了。
这是struts2.3.15.1的默认配置
1 | <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="struts" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default"/> |
2 | <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default" /> |
3 | <constant name="struts.multipart.parser" value="jakarta" /> |
在status2 .3.4.1的配置方式
在status2 .3.4.1的配置文件里加上
01 | <bean type= "org.apache.struts2.dispatcher.multipart.MultiPartRequest" |
02 | name= "myRequestParser" class= "com.icf.common.base.actions.RequestParseWrapper" |
03 | scope= "default" optional= "true " /> |
04 | <constant name= "struts.multipart.handler" value= "myRequestParser" /> |
05 |
06 |
07 | class |
08 | public class RequestParseWrapper extends JakartaMultiPartRequest { |
09 |
10 | publicvoid parse(HttpServletRequest servletRequest, String saveDir)throws IOException{ |
11 | } |
12 | } |
struts2.3.15.1的配置方式
在struts2.3.15.1后的配置里,struts2的struts-default.xml 里把 struts.multipart.handler 改成了 struts.multipart.parser
在struts配置文件中
1 | <bean type= "org.apache.struts2.dispatcher.multipart.MultiPartRequest" |
2 | name= "myRequestParser" class= "com.icf.common.base.actions.RequestParseWrapper" |
3 | scope= "default" optional= "true " /> |
4 | <constant name= " struts.multipart.parser" value= "myRequestParser" /> |
1 | public class RequestParseWrapper extends JakartaMultiPartRequest { |
2 |
3 | publicvoid parse(HttpServletRequest servletRequest, String saveDir)throws IOException{ |
4 | } |
5 | } |
01 | @RequestMapping(value="/uploadFile",method=RequestMethod.POST) |
02 | public void uploadFile(HttpServletRequest req,HttpServletResponse resp) { |
03 | final HttpSession session = req.getSession(); |
04 | String path = session.getServletContext().getRealPath("/"); |
05 | File file = new File(path + "/upload"); |
06 | if(!file.exists()) file.mkdirs(); |
07 | boolean isMultipart = ServletFileUpload.isMultipartContent(req); |
08 | if (!isMultipart) return; |
09 |
10 | // Create a factory for disk-based file items |
11 | FileItemFactory factory = new DiskFileItemFactory(); |
12 | // Create a new file upload handler |
13 | ServletFileUpload upload = new ServletFileUpload(factory); |
14 | //上传文件大小最大不能超过60M |
15 | upload.setFileSizeMax(60000000); |
16 | upload.setHeaderEncoding("UTF-8"); |
17 |
18 | upload.setProgressListener(new ProgressListener() { |
19 | @Override |
20 | public void update(long pBytesRead, long pContentLength, int pItems) { |
21 | ProcessInfo pri = new ProcessInfo(); |
22 | pri.itemNum = pItems; |
23 | pri.readSize = pBytesRead; |
24 | pri.totalSize = pContentLength; |
25 | pri.show =((float)pBytesRead/1000)+"/"+((float)pContentLength/1000)+" Kbyte"; |
26 | pri.rate = Math.round((float)pBytesRead/(float)pContentLength*100); |
27 | session.setAttribute("proInfo", pri); |
28 | try { |
29 | Thread.sleep(1); |
30 | } catch (InterruptedException e) { |
31 | e.printStackTrace(); |
32 | } |
33 | System.out.println("已经上传 " +pri.rate); |
34 |
35 | } |
36 | } ); |
37 |
38 | List<FileItem> items; |
39 |
40 | try { |
41 | items = upload.parseRequest(req); |
42 |
43 | System.out.println("==========================================="); |
44 | for(FileItem item: items) { |
45 | System.out.println("ContentType "+ item.getContentType()); |
46 | System.out.println(" 字段名 " + item.getFieldName()); |
47 | System.out.println("文件名 "+item.getName()); |
48 | System.out.println("文件大小 " + item.getSize()); |
49 |
50 | item.write(new File(file,item.getName())); |
51 | } |
52 | } catch (FileUploadException e) { |
53 | // TODO Auto-generated catch block |
54 | e.printStackTrace(); |
55 | } catch (Exception e) { |
56 | // TODO Auto-generated catch block |
57 | e.printStackTrace(); |
58 | } |
59 |
相关文章推荐
- status2.3.4和struts2.3.15.1 Fileupload上传文件简单分析
- struts2.3.15.1 用 Fileupload上传文件配置
- struts简单例子的分析(含代码注释和配置文件说明)
- 一个简单的struts实现文件上传示例
- BL_15 在线文件上传和下载 Struts 2.X + FileUpload
- struts简单例子的分析(含代码注释和配置文件说明)
- struts简单例子的分析(含代码注释和配置文件说明)
- struts+newxy(新坐标)文件上传,比jspsmart更简单 作者:胡立新
- 简单的文件上传(common-fileupload)
- PHP文件上传原理简单分析
- struts实现简单的文件上传与下载
- struts+newxy(新坐标)文件上传,比jspsmart更简单
- FileUpload上传文件时客户端的简单验证
- struts简单例子的分析(含代码注释和配置文件说明)
- 《struts----入门简要分析struts的工作原理》---只是简单的分析配置文件,对内部的FormBean等有关的知识未涉及
- Asp.net的FileUpload控件的文件上传与Extjs文件上传的简单Demo
- struts+newxy(新坐标)文件上传,比jspsmart更简单
- 超简单的struts文件上传
- commons_fileupload组件 简单文件上传
- asp.net,C#,FileUpload控件文件上传简单实例,vs2010