struts2中文件上传与错误国际化

Struts2上传文件及其错误信息国际化

 Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

二 表单的要求

method=”post”

enctype=”multipart/form-data”

<input type=”file” name=”必须给”/>

Action(一对三):

 String fieldNameContentType(文件的MIME类型);

  String fieldNameFileName(文件的名称);

   File fieldName(文件的内容)

  在多文件上传中属性类型不一样:

Action(多对三,其实类型也可以是数组!):

ist<String> fieldNameContentType(文件的MIME类型);

 List<String> fieldNameFileName(文件的名称);

List<File> fieldName(文件的内容)

三 指定用户上传文件的大小,有两种方式

  1 <constant name="struts.multipart.maxSize" value="9000000" />  表单总共大小

2 <param name="fileUpload.maximumSize">10240</param>  单个文件大小


四 国际化


在上传文件时如果出现错误,那么在input视图显示的错误信息都是英文的。如果想替换这些信息,需要知道这些错误信息的资源key,然后在我们自己的国际 化资源文件中指定这些key的新值即可。

与上传相关的错误信息都在org.apache.struts2包下的struts-message.properties文件中。

struts.messages.error.uploading =Error uploading: {0} -----上传出错

struts.messages.error.file.too.large =The file is to large to be uploaded: {0} "{1}" "{2}" {3}-----单个文件超出大小

struts.messages.error.content.type.not.allowed =Content-Type not allowed: {0} "{1}" "{2}" {3}---------非法文件类型

struts.messages.error.file.extension.not.allowed=File extension not allowed: {0} "{1}" "{2}" {3}-----非法扩展名

struts.messages.upload.error.SizeLimitExceededException] =Request exceeded allowed size limit! Max size allowed is: {0} but request was: {1}!--请求总大小超出限制

 

  我们可以在src下res.properties文件,在这个文件中对象以上资源key进行替换。然后在struts.xml文件中给出<constantname="struts.custom.i18n.resources" value="res/">即可。

struts.xml

<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

	<constant name="struts.devMode" value="false" />
	<!-- struts.multipart.maxSize指定上传的整个表单上限,默认值为2097152(即2M)
		 文件不上传并且后台会报错,将错误定义为actionerror级别,内容如下:  
    	the request was rejected because its size (2722341) exceeds the configured maximum (2097152)  
    	这个错误不能被国家化,但是可以通过相应的action类继承ActionSupport类, 并且重写addActionError()方法修改错误信息。-->
	<constant name="struts.multipart.maxSize" value="200000"></constant>
	    
    <!-- 配置临时目录(上传文件一旦超出缓存大小,那么会先保存到临时目录) -->
	<constant name="struts.multipart.saveDir" value="/tmp"/>
	
	
    <package name="default" namespace="/" extends="struts-default">        	
         <action name="updataAction" class = "day03.simpleUpdata.f1.UpdataAction">
         	<!-- 在默认拦截器中可以向指定拦截器添加参数,即   "拦截器.参数名"	 -->
         	<interceptor-ref name="defaultStack">
         		<!-- fileUpload拦截器中的参数
         			Long maximumSize;允许上传的最大字节数
   					Set<String> allowedTypesSet;允许上传的MIME类型
   					Set<String> allowedExtensionsSet;允许上传的后缀名,后执行覆盖参数allowedTypesSet      		
         		 -->
         		<!-- 单个文件不能超过的大小  -->
         		<param name="fileUpload.maximumSize">10240</param>
         		
         		<!-- 文件的MIME类型,默认值为text/plain -->
         		<param name="fileUpload.allowedTypes">image/jpeg</param>
         		
         		<!-- 如果配置了allowedTypes,则allowedExtensions将不起作用   -->
         		<param name="fileUpload.allowedExtensions">txt</param>
         	</interceptor-ref>
           <result>index.jsp</result>
           <result name="input">error.jsp</result>
        </action>
        
        
        
       
    </package>
</struts></span><span style="font-size: 14px;">
</span>

jsp页面

<span style="font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
     </head>
  
  <body>
 	 <!-- enctype 默认是 application/x-www-form-urlencoded -->  
   	<form enctype="multipart/form-data" method="post" action="updataAction">
   		姓名:<input name="name" type="text"> <br>   		
   		简历1:<input type="file" name="f1"><br>
   		简历2:<input type="file" name="f1"><br>
   		简历3:<input type="file" name="f1"><br>   		
   		<input type="submit" value="提交"/>   		
   	</form>
   	
  </body>
</html>
</span>

Action

<span style="font-size:18px;">package day03.simpleUpdata.f1;

import java.io.File;
import java.util.List;

import org.apache.commons.io.FileUtils;

import com.opensymphony.xwork2.ActionSupport;
/**
 * 
 *  Action(多对三,其实类型也可以是数组!)其中三个参数的名字是规定的:
 *  	List<String> fieldNameContentType(文件的MIME类型);
 *  	List<String> fieldNameFileName(文件的名称);
 *  	List<File> fieldName(文件的内容)
 *  
 * 上传文件其实是上传了两份  
 * 	首先将上传的文件保存到 default.properties 文件中 struts.multipart.saveDir键指定的目录中 ,默认是空的 
 * 	保存在  Tomcat 6.0\work\Catalina\localhost\struts2目录下以.tmp后缀名的文件 ,命名为临时文件  
 * 	如果要在 struts.multipart.saveDir 指定目录, 则可以在 src文件夹下 建一个 struts.properties, 覆盖  default.properties 的某些键值   
 * 	还有一份是 存放在自己设定的目录下 
 *  
 * @author Spring
 *
 */
public class UpdataAction extends ActionSupport {
	//三个参数都是通过
	private List<String> f1ContentType;
	private List<String> f1FileName;
	private List<File> f1;	
	
	public void setF1ContentType(List<String> f1ContentType) {
		this.f1ContentType = f1ContentType;
	}

	public void setF1FileName(List<String> f1FileName) {
		this.f1FileName = f1FileName;
	}

	public void setF1(List<File> f1) {
		this.f1 = f1;
	}
<span style="white-space:pre">	 public void addActionError(String anErrorMessage) {  
<span style="white-space:pre">	</span>        // 这里要先判断一下,是我们要替换的错误,才处理  
<span style="white-space:pre">	</span>        if (anErrorMessage.startsWith("the request was rejected because its size")) {  
<span style="white-space:pre">	</span>            
<span style="white-space:pre">	</span>        <span style="white-space:pre">	</span>//getText()方法是ActionSupport类中的方法,可以得到国际化文件中的信息  
<span style="white-space:pre">	</span>            super.addActionError(getText("struts.messages.error.file.too.large"));  
<span style="white-space:pre">	</span>            /*
<span style="white-space:pre">	</span>             * 或者将该错误定义为fielderror级别:  
<span style="white-space:pre">	</span>             * super.addFieldError("fileTooLargeInfo", "文件的大小超出系统处理的范围
<span style="white-space:pre">	</span>             */  
<span style="white-space:pre">	</span>        } else {// 否则按原来的方法处理  
<span style="white-space:pre">	</span>            super.addActionError(anErrorMessage);  
<span style="white-space:pre">	</span>        }  
<span style="white-space:pre">	</span>    } </span>
	public String execute() throws Exception {	
		for(int i= 0; i < f1.size();i++){	
			File srcFile = f1.get(i);
			File destFile = new File("D:/"+f1FileName.get(i));
			
			//调用FileUtils的方法进行复制文件
			FileUtils.copyFile(srcFile, destFile);			
			
		}
		return null;
	}
	
}</span>

package.propertise

struts.messages.error.file.too.large=
struts.messages.error.uploading=
struts.messages.error.content.type.not.allowed=


Struts2上传的细节:

 Struts2自己没有提供上传组件,而是依赖其他上传组件!

 Struts2默认底层使用的是commons-fileupload!

  Struts2的上传相关配置:

Ø  三常量:

struts.multipart.parser=jakarta,它的可选值还有:cos、pell;

struts.multipart.saveDir:配置临时目录(上传文件一旦超出缓存大小,那么会先保存到临时目录);

 struts.multipart.maxSize:指定上传的整个表单上限,默认值为2097152(即2M);

Ø  三拦截器参数(fileUpload拦截器):

¨      maximumSize:单个上传文件的限制;

¨      allowedTypes:允许上传的类型(MIME类型),多个类型可以使用逗号分隔!

¨      allowedExtensions:允许上传的扩展名,多个扩展名使用逗号分隔!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值