关于Struts2的文件上传
要实现Struts2框架的文件上传,需要用到2个jar包
由于文件解析Struts2内部已经帮我们做好了,大大降低了开发难度,我们只需要在Action里设置好对应的参数,目录进行使用即可。 来个小示例: upload.jsp 这个页面的表单有三点需要注意的: 1、表单必须使用post方式提交 2、表单编码类型 enctype="multipart/form-data" ? 3、<s:file label="上传文件:" name="upload"></s:file> name属性必须要写 1 <%@ page language="java contentTypetext/html; charset=utf-8 pageEncodingutf-8"%> 2 @ taglib prefixs uri/struts-tags" 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html 5 head 6 Meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" 7 title>上传文件示例</ 8 9 body10 s:actionerror/> 11 s:fielderror12 s:form action="upload.action" theme="simple" namespace="/" method="post" enctype="multipart/form-data"13 s:file label="上传文件:" name="upload"></s:file14 s:submit value="提交上传"s:submit15 s:form16 17 > UploadAction.java 这里有几个注意点: 1、三个成员变量的命名是有规范的: private File upload里的的upoload一样要和你上传提交页面里的name属性值对应一致 文件类型和文件名命名分别为:页面name属性值+ContentType,页面name属性值+FileName 2、提供setter方法,以便接收对应的数据 3、定义目标文件存放处,用commons-io-2.0.1.jar包提供的FileUtils工具类把上传文件复制到指定位置 1 package com.lcw.struts2.upload; 2 import java.io.File; java.io.IOException; 5 org.apache.commons.io.FileUtils; org.apache.struts2.ServletActionContext; 8 com.opensymphony.xwork2.ActionSupport; 10 public class UploadAction extends ActionSupport { 12 //<s:file label="上传文件:" name="upload"></s:file> private File upload;命名应该和上传页面name属性值保持一致 private String uploadContentType;属性值+ContentType 15 private String uploadFileName;属性值+FielName 16 17 void setUpload(File upload) { 18 this.upload = upload; 19 } 20 21 setUploadContentType(String uploadContentType) { 22 this.uploadContentType = uploadContentType; 23 24 25 setUploadFileName(String uploadFileName) { 26 this.uploadFileName = uploadFileName; 27 28 29 public String upload() { 30 File destFile = new File(ServletActionContext.getServletContext() 31 .getRealPath("/uploads") 32 + "/" + uploadFileName); 33 try { 34 工具类 35 FileUtils.copyFile(upload,destFile); 36 } catch (IOException e) { 37 e.printStackTrace(); 38 } 39 return SUCCESS; 40 41 } struts.xml <?xml version="1.0" encoding="UTF-8"?> 2 DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"struts 6 constant name="struts.devMode" value="true" /> 7 <!-- 全局国际化配置 --> 8 ="struts.custom.i18n.resources"="messages"constant 9 10 package ="struts2test" extends="struts-default"11 action ="upload" class="com.lcw.struts2.upload.UploadAction"12 result ="success">/index.jspresult13 ="input">/upload.jsp14 16 > 看下效果: 到这里基本的上传操作已经完成了,下面来下关于上传文件的配置参数: 首先我们打开Struts2的核心包文件: 其中我们可以看到2个参数: ①struts.multipart.saveDir --默认的上传路径 ②struts.multipart.maxSize=2097152 --默认上传文件的大小 若我们想改变参数设置,我们可以在struts.xml里配置,例如改变上传文件大小限定..于此类推(这里改变的是全局设定) 1 ="struts.multipart.maxSize"="200000"> 若我们想对单独的表单做设定,struts2的拦截器FileUpload有3个属性可以供我们选择 ①fileUpload.maximumSize: 上传文件的最大长度(以字节为单位),默认值为 2 MB 关于参数,我们可以打开struts2的核心包里的struts-default.xml进行查看 我们可以发现fielUpload拦截器处于Struts2默认的拦截栈里,并且可以发现这个拦截栈引用了workflow,调用Action的validate方法,一旦有错误返回,重新定位到INPUT页面 例如:我们保持以上上传代码不变,在配置文件的Actin里添加: interceptor-ref ="defaultStack"2 param ="fileUpload.allowedExtensions">.txtparam3 interceptor-ref> 设置允许上传文件类型为txt,此时来看看效果: 很明显,上传失败了,也就意味我们的配置文件限制起作用了。 那么关于错误信息的回显 1、 若我们是针对常量做设置,出错则跳转input 视图, 通过 <s:actionError /> 回显错误信息? 2、若我们是对fileLoad做设置,出错则在页面通过 <s:fieldError /> 回显错误信息? 例如上面出现的回显错误信息File extension not allowed,我们可以在struts2的核心jar的struts-messages.properties里找到 其中的{0}{1}{2}{3}参数分别代表upload,"C和C++程序员的Lua快速入门.pdf" ,"upload__689312be_147f80f105d__8000_00000005.tmp" ,application/pdf 我们可以来个国际化覆盖对应的key值,进行我们想要的回显信息: 我上传一个word文件,看下此时的页面效果: 搞定搞定,写博客还是蛮累的。。。关于Struts2的多文件上传请戳这里:http://www.cnblogs.com/lichenwei/p/3928200.html ? (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |