您的位置:首页 > 编程语言 > Java开发

Struts2文件上传,以及上传拦截异常国际化处理

2015-12-19 14:31 591 查看
近期做项目遇到了非常多的文件上传,下面对struts2上传文件做一个详细的解释,我会附上部分代码。

一、文件上传

1、jsp页面

<li>
							<div style="width: 170px; height: 25px; border: 1px solid 2dd3fd; background-color: #2dd3fd;border-radius: 3px; margin-left: -40px;">
								<label class="wordtwo" style="color: white; font-size: 15px;">>> 请上传文件吧!</label>
							</div>
						</li>
						<li>
							<div class="uploader white" style="margin-left: 135px;">
								<input type="text" class="filename" readonly/>
								<input type="button" name="file" class="button" value="上传..." />
								<input type="file" size="30" name="upload"/>
							</div>

						</li>



2、文件上传action

看struts2官方的doc上传部分 你会发现,上传的action 必有三个属性 分别是
File xxx;//代表页面表单的input file 和 xxx 对应标签的name属性
String xxxFileName;//这里是上传file的名称
String xxxContentType;//这里是上传file的类型
三者缺一不可 值得说明的是 这里的File 并不是最终报错的File 它只是作为临时文件保存
public class FileUpLoadAction extends BaseAction<Student>{
	private File upload;//对应 jsp页面 <span style="font-family: Arial, Helvetica, sans-serif;"><input type="file" size="30" name="upload"/></span>name名
	private String uploadFileName;//上传文件的名字
	private String uploadContentType;//上传文件的类型
	private String result;
	@Override
	public String execute() throws Exception {
		//获取保存路径
		String path=ServletActionContext.getServletContext().getRealPath("/upload");
		File file = new File(path);
		if(!file.exists()){        //如果路径不存在,则创建
			file.mkdirs();
		}
		FileUtils.copyFile(upload, new File(file,uploadFileName));//copy临时文件并保存
		return SUCCESS;
	}
	///////////////////////////////////////属性的封装///////////////////////
	public File getUpload() {
		return upload;
	}
	public void setUpload(File upload) {
		this.upload = upload;
	}
	public String getUploadFileName() {
		return uploadFileName;
	}
	public void setUploadFileName(String uploadFileName) {
		this.uploadFileName = uploadFileName;
	}
	public String getUploadContentType() {
		return uploadContentType;
	}
	public void setUploadContentType(String uploadContentType) {
		this.uploadContentType = uploadContentType;
	}
	public String getResult() {
		return result;
	}
	public void setResult(String result) {
		this.result = result;
	}
    
}


3、struts2.xml的配置

<action name="FileUpLoadAction" class="com.zzuli.student.action.FileUpLoadAction"> 
<!--出现异常转向异常页面   这里就不写出上传成功转向的页面了  -->
<result name="input">/WEB-INF/view/public/error.jsp</result>
    <interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型 -->
<param name="allowedTypes">doc,application/msword</param>
<!-- 配置允许上传文件的大小-->
<param name="maximumSize">3M</param></interceptor-ref>
<!-- 系统默认拦截器 -->
<interceptor-ref name="defaultStack">
</interceptor-ref>
</action>




默认的拦截器必须在fileUpload拦截器之后。
附:多文件上传,只需把action里的三个属性变为List即可

二、国际化处理

上面的struts2的配置文件中,可以看到拦截的是 doc格式,那么上传其他格式,就会报异常转向下面的 result
<span style="font-size:18px;"><result name="input">/WEB-INF/view/public/error.jsp</result></span>
error.jsp页面就一个struts2的一个标签,用来显示异常信息
<s:fielderror></s:fielderror>

当你上传的格式非doc的时候异常信息就会在s:fielderror标签显示出来,但是客户碰到这样的异常都是一大串英文字符,肯定是看不懂的,这时候我们就可以用struts2的国际化来处理
在官方文档里我们可以看到异常信息对应的错误信息
这里我就展示两个
struts.messages.error.file.too.large ---------上传文件过大,不符合拦截的大小

struts.messages.error.content.type.not.allowed------------上传文件格式与拦截格式不符

那么怎么来让异常显示我们设置的为其对应的中文呢?
struts2的国际化分为三个级别 有application级别 也就是src下 包级别 action类级别
这里展示 application级别 首先在项目src下建立一个properties文件
命名为app_zh_CN.properties
然后在 Properties界面下add 以上两条异常信息
name对应异常value对应自定义提示
这样就能完成国际化了吗?很明显是不可以的。我们要在struts2.xml struts标签下添加国际化 i18n
<!--开启国际化 级别为application -->

<constant name="struts.custom.i18n.resources" value="app"></constant>

这样的设置好后 当有国际化异常后 拦截器会自动查找app_zh_CN.properties文件了
更过内容可以查看官方文档!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: