一、错误提示信息配置
昨天说到更改默认错误配置信息,我测试很多遍,一直都不对。下面贴出来,待以后有好方法了再补充吧。
首先新建一个properties文件,这里命名为testupload.properties,内容为:
struts.messages.error.file.too.large=\u6587\u4EF6\u592A\u5927{0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed=\u6587\u4EF6\u7C7B\u578B\u4E0D\u5141\u8BB8! {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed=\u4E0D\u5141\u8BB8\u7684\u6269\u5C55\u540D! {0} "{1}" "{2}" {3}
这里将默认提示信息改为中文的。upload.xml中内容如下:
/p>
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
/WEB-INF/upload_success.jsp
upload.jsp
5242880
.txt,.xml
text/plain,text/xml
二、多个文件上传
只需要更改upload.jsp中的部分内容即可:
Insert title here结果如下所示:
也可以将UploadAction.java中的file改为数组类型的,如下所示:
packageaction;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjavax.servlet.ServletContext;importorg.apache.struts2.ServletActionContext;importcom.opensymphony.xwork2.ActionSupport;/*** @ClassName: UploadAction
* @Description: 文件上传
*@author: amosli
* @email:amosli@infomorrow.com
* @date Jan 14, 2014 1:50:28 AM*/
public class UploadAction extendsActionSupport {private static final long serialVersionUID = -8920466592471253212L;private String username;//用户名
private String[] uploadContentType;//上传文件的类型,(Fileupload拦截器传入的参数)
private File[] upload;//上传的文件,(Fileupload拦截器传入的参数)
private String[] uploadFileName;//上传文件的真实文件名,(Fileupload拦截器传入的参数)
public voidsetUsername(String username) {this.username =username;
}publicString[] getUploadContentType() {returnuploadContentType;
}public voidsetUploadContentType(String[] uploadContentType) {this.uploadContentType =uploadContentType;
}publicFile[] getUpload() {returnupload;
}public voidsetUpload(File[] upload) {this.upload =upload;
}publicString[] getUploadFileName() {returnuploadFileName;
}public voidsetUploadFileName(String[] uploadFileName) {this.uploadFileName =uploadFileName;
}publicString getUsername() {returnusername;
}public String uploadMethod() throwsException {
ServletContext context=ServletActionContext.getServletContext();
String real_path= context.getRealPath("/WEB-INF/upload/");for (int i = 0; i < upload.length; i++) {
InputStream inputStream= newFileInputStream(upload[i]);
OutputStream outputStream= new FileOutputStream(real_path + "/" +uploadFileName);byte[] b = new byte[1024];int len = 0;while ((len = inputStream.read(b)) > 0) {
outputStream.write(b,0, len);
}//关闭流
inputStream.close();
outputStream.close();//删除tmp文件,最好是用tyrcatch finally进行删除//upload[i].delete();
}returnSUCCESS;
}
}
View Code
这里没有立马删除是想做个演示,查看一下缓存文件空间生成了几个。
首先,将项目打包,生成war包,这里我用的是mvn package打的包。
其次,将tomcat启动,将成生的war包拷到webapp目录下。
最后,在浏览器演示多个文件上传。
演示结果如下图所示:
1、打开浏览器,上传a.txt,b.txt,c.txt三个文件
2、点击提交后,跳转到成功提示页面
3.查看相对应的文件目录,这里没有删除缓存,所以可以看到三个缓存文件
三、指定文件上传的路径
如何通过配置文件,手动指定文件的上传目录?
首先,在upload.xml中action标签中指定参数名为uploadPath,赋值为/home/amosli/develop/struts2_learn/
/home/amosli/develop/struts2_learn/.................
全部的upload.xml文件为:
/p>
"http://struts.apache.org/dtds/struts-2.3.dtd">
/home/amosli/develop/struts2_learn/
/WEB-INF/upload_success.jsp
upload.jsp
5242880
.txt,.xml
text/plain,text/xml
View Code
其次,在UploadAction.java中新建一个变量uploadPath,为其设置set方法。同时在uploadMethod方法中将目标文件夹改为uploadPath.
即,UploadAction.java为:
packageaction;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importcom.opensymphony.xwork2.ActionSupport;/*** @ClassName: UploadAction
* @Description: 文件上传
*@author: amosli
* @email:amosli@infomorrow.com
* @date Jan 14, 2014 1:50:28 AM*/
public class UploadAction extendsActionSupport {private static final long serialVersionUID = -8920466592471253212L;private String username;//用户名
private String[] uploadContentType;//上传文件的类型,(Fileupload拦截器传入的参数)
private File[] upload;//上传的文件,(Fileupload拦截器传入的参数)
private String[] uploadFileName;//上传文件的真实文件名,(Fileupload拦截器传入的参数)
privateString uploadPath;public voidsetUploadPath(String uploadPath) {this.uploadPath =uploadPath;
}public voidsetUsername(String username) {this.username =username;
}publicString[] getUploadContentType() {returnuploadContentType;
}public voidsetUploadContentType(String[] uploadContentType) {this.uploadContentType =uploadContentType;
}publicFile[] getUpload() {returnupload;
}public voidsetUpload(File[] upload) {this.upload =upload;
}publicString[] getUploadFileName() {returnuploadFileName;
}public voidsetUploadFileName(String[] uploadFileName) {this.uploadFileName =uploadFileName;
}publicString getUsername() {returnusername;
}public String uploadMethod() throwsException {//ServletContext context = ServletActionContext.getServletContext();//String real_path = context.getRealPath("/WEB-INF/upload/");
for (int i = 0; i < upload.length; i++) {
InputStream inputStream= newFileInputStream(upload[i]);
OutputStream outputStream= new FileOutputStream(uploadPath + "/" +uploadFileName[i]);byte[] b = new byte[1024];int len = 0;while ((len = inputStream.read(b)) > 0) {
outputStream.write(b,0, len);
}//关闭流
inputStream.close();
outputStream.close();//删除tmp文件,最好是用tyrcatch finally进行删除//upload[i].delete();
}returnSUCCESS;
}
}
View Code
最后,运行效果如下: