java struts2上传文件_java struts2入门学习实例--使用struts2快速实现多个文件上传...

一、错误提示信息配置

昨天说到更改默认错误配置信息,我测试很多遍,一直都不对。下面贴出来,待以后有好方法了再补充吧。

首先新建一个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

结果如下所示:

48fbfee353ceff7517fb4cf80f2c86eb.png

也可以将UploadAction.java中的file改为数组类型的,如下所示:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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三个文件

ba7b16dbbfd60cb1f3a77e6c0ea68c61.png

2、点击提交后,跳转到成功提示页面

4453ee5b6ac8c82a14211a59bf60e2dd.png

3.查看相对应的文件目录,这里没有删除缓存,所以可以看到三个缓存文件

0652500e08ab6b876c5b999d4d04b618.png

三、指定文件上传的路径

如何通过配置文件,手动指定文件的上传目录?

首先,在upload.xml中action标签中指定参数名为uploadPath,赋值为/home/amosli/develop/struts2_learn/

/home/amosli/develop/struts2_learn/.................

全部的upload.xml文件为:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/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为:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

最后,运行效果如下:

e0de7ed2cf7db5f66c805d8aa3ab9d02.png

3ac0bbcf79853285a3ce7fe126842234.png

7e12985c5efdfab81193ecc498ae4234.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值