2015-03-27 17:47:02.0|分类: struts|浏览量: 2980
Struts2本身并没提供上传的组件,可以使用上传框commons-fileupload进行实现。 struts2配置文件default.properties(位置struts2-core-2.3.16.3\org\apache\struts2)默认处理多文件上传的是: struts.multipart.parser=jakarta # uses javax.servlet.context.tempdir by default struts.multipart.saveDir= struts.multipart.maxSize=2097152 jakarta设置是在文件struts.default.xml中: <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default"/> struts2上传文件过程: 1、需要的jar文件:xwork-core-2.3.16.1.jar,struts2-core-2.3.16.1.jar,ognl-3.0.6.jar,freemarker-2.3.19.jar,commons-fileupload-1.3.1.jar,commons-io-2.2.jar。尤其commons-fileupload-1.3.1.jar,commons-io-2.2.jar这两个文件一般人老是忘掉。 2、页面文件主要代码: 3、action中的主要代码: DiskFileItemFactory dff = new DiskFileItemFactory(); dff.setSizeThreshold(1024000); ServletFileUpload servletFileUpload = new ServletFileUpload(dff); servletFileUpload.setHeaderEncoding("UTF-8"); // 设置编码,因为我的jsp页面的编码是utf-8的 FileItemIterator fileItemIterator = servletFileUpload.getItemIterator(request); String fileName = ""; while (fileItemIterator.hasNext()) { FileItemStream fis = fileItemIterator.next(); if (!fis.isFormField() && fis.getName().length() > 0) { fileName = fis.getName(); ......//自己的业务代码 }}} 4、设置配置文件: <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="myRequestParser" class="com.cookqq.struts.CustomJakartaMultiPartRequest" scope="default" optional="true" /> 5、com.cookqq.struts.CustomJakartaMultiPartRequest代码: public class CustomJakartaMultiPartRequest extends JakartaMultiPartRequest { @Override public void parse(HttpServletRequest request, String saveDir) throws IOException { // super.parse(request, saveDir); } } 请注意:集成JakartaMultiPartRequest类后实现方法parse,需要注释掉super.parse这行,整个方法是空。如果不注释掉这行,FileItemIterator fileItemIterator = servletFileUpload.getItemIterator(request),获取不到任何文件,你debug的时候发现request中也有文件,但就是执行fileItemIterator.hasNext()就是获取不到任何文件。 启动起来就ok了 |