文档章节

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

志强朱
 志强朱
发布于 2016/05/08 17:45
字数 941
阅读 9
收藏 0

近期做项目遇到了非常多的文件上传,下面对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文件了
更过内容可以查看官方文档!

© 著作权归作者所有

共有 人打赏支持
志强朱
粉丝 4
博文 209
码字总数 108290
作品 0
郑州
程序员
私信 提问
the request was rejected because its size (2877943

在struts2中我们上传文件大于struts.multipart.maxSize设置的值时会抛出the request was rejected because its size (XXXX) exceeds the configured maximum (XXXX)异常,他是不能被国际化的...

dml124
2013/12/10
0
0
Struts2的其它知识

4、Struts2的其它知识 4.1、ModelDriven 如果希望传递对象信息到action,但对象信息较多时,需要传递大量的参数并且要设置这些参数,工作量 很大,所以建议的方式是在action中直接创建相应的...

pmos
2016/11/02
13
0
struts2源码系列(3)--拦截器

1.struts2拦截器介绍 接口:Interceptor void destroy();//拦截器销毁时调用的方法 void init();//拦截器实例化调用的方法 String intercept(ActionInvocation invocation) throws Exception...

一不留神
2016/08/26
10
0
Struts2文件的上传和下载

文件上传的原理: 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1) application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种...

倚小丁
2010/11/01
0
3
国际化信息显示 ,自定义拦截器

四、 国际化信息显示 1、 国际化原理 ? 什么是国际化 ? 同一款软件 可以为不同用户,提供不同语言界面 ---- 国际化软件 需要一个语言资源包(很多properties文件,每个properties文件 针对...

day戴
2014/07/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

拒绝拖拽 使用ConstraintLayout优化你的布局吧

ConstraintLayout出现有一段时间了,不过一直没有特别去关注,也多多少少看了一些文字介绍,多数都是对使用可视化布局拖拽,个人对拖拽一直不看好,直到前端时间看到该文: 解析ConstraintL...

SuShine
23分钟前
2
0
开源 java CMS - FreeCMS2.8 数据对象 report

项目地址:http://www.freeteam.cn/ report 在使用申报相关标签时,标签会封装report供页面调用。 属性 说明 id id name 项目名称 unit 申报单位 filename 申报文件名称 filenum 申报文件文号...

freeteam
25分钟前
1
0
MySQL配置主从复制

1.master配置my.ini添加: log-bin=mysql-bin//开启二进制日志server-id=1innodb_flush_log_at_trx_commit=1//每次事务的结束都会触发Log Thread 将log buffer 中的数据写入文件并通知文...

ty淡然
26分钟前
1
0
在vs2017中将.obj链接到.lib中

项目属性-库管理器-常规-附加依赖项-"your.obj;....."

simpower
31分钟前
0
0
同一数据库,从这个表迁移到另外一张表

要求: 1、同一个数据库 2、两张表结构相同 insert into t_walk_user_step_history(user_id,city_id,steps,prop_steps,today_praise,today_date,insert_time)selectuser_id,city_id,st......

就叫程舰
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部