struts2中文件上传与错误国际化
2015-05-08 19:48
453 查看
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文件中。
我们可以在src下res.properties文件,在这个文件中对象以上资源key进行替换。然后在struts.xml文件中给出<constantname="struts.custom.i18n.resources" value="res/">即可。
struts.xml
jsp页面
Action
package.propertise
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:允许上传的扩展名,多个扩展名使用逗号分隔!
一
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}!--请求总大小超出限制 |
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:允许上传的扩展名,多个扩展名使用逗号分隔!
相关文章推荐
- 2011级-csdn-java-张侃—struts2文件上传错误信息国际化的处理(案例)
- struts2文件上传与错误信息国际化
- struts2文件上传与错误信息国际化
- Struts2上传文件时错误
- struts2文件上传提示信息国际化
- Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法
- struts2 文件上传 拦截器的错误配置导致的问题
- Struts2文件上传,以及上传拦截异常国际化处理
- Struts2 文件上传后台校验上传文件的大小,过大时跳转到错误页面并返回
- 4.3.6: Struts2文件上传---输出错误提示
- 关于Struts2文件上传Unable to find 'struts.multipart.saveDir'错误的解决
- Struts2 多文件上传、限制文件大小、更改错误提示--文件下载
- Struts2国际化、拦截器配置以及使用struts上传文件
- Struts2上传文件获取param配置的文件路径时的错误
- Struts2文件上传,以及上传拦截异常国际化处理
- JAVAWEB开发之Struts2详解(三)——Struts2信息国际化、自定义拦截器以及Struts2文件上传和下载详解
- Struts2实现文件的上传并实现错误提示
- struts2文件上传时错误信息
- 【JavaWeb-17】国际化、自定义拦截器、struts2文件上传与下载、OGNL、contextMap
- Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法