Struts2提供的文件上传下载机制十分简便,使得我们写很少的代码,就可以实现该功能,单文件上传、多文件上传、下载等。
当然,我们肯定要引入Struts2上传下载文件相关的jar包的,这里需要引入这两个包:commons-io-1.3.2.jar和commons-fileupload-1.2.1.jar
编辑Action代码,实现单文件的上传
package com.lf.zym.struts2;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import com.opensymphony.xwork2.Action;
public class UploadTestAction {
private String title;
private String myFileFileName;
private File myFile;
private String myFileContentType;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getMyFileFileName() {
return myFileFileName;
}
public void setMyFileFileName(String myFileFileName) {
this.myFileFileName = myFileFileName;
}
public File getMyFile() {
return myFile;
}
public void setMyFile(File myFile) {
this.myFile = myFile;
}
public String getMyFileContentType() {
return myFileContentType;
}
public void setMyFileContentType(String myFileContentType) {
this.myFileContentType = myFileContentType;
}
public String execute() throws Exception{
InputStream is=null;
OutputStream os=null;
try {
is = new BufferedInputStream(new FileInputStream(myFile));
os = new BufferedOutputStream(new FileOutputStream("f:\\"+myFileFileName));
byte[] buffer = new byte[1024];
int len=0;
while((len=is.read(buffer))>0){
os.write(buffer,0,len);
}
}finally{
if(is !=null){is.close();}
if(os!=null){os.close();}
}
return Action.SUCCESS;
}
}
Struts2.xml配置:
<struts>
<constant name="struts.i18n.encoding" value="UTF-8"/>
<constant name="struts.configuration.xml.reload" value="true"/>
<constant name="struts.devMode" value="true"/>
<package name="upload-package" extends="struts-default">
<action name="upload" class="com.lf.zym.struts2.UploadTestAction">
<result>/success.jsp</result>
</action>
</package>
</struts>
JSP页面:
<body>
<form action="upload.action" method="post" enctype="multipart/form-data">
标题:<input type="text" name="title">
文件:<input type="file" name="myFile">
<input type="submit" value="上传">
</form>
</body>
上传成功之后,在指定的文件存放位置就可以找到我们上传的文件,在这里遇到这样一个问题,当我传大文件的时候,会报错,上传失败。这是因为我们没有设置上传文件的大小,只需要设置一下就可以,可以建立一个struts.properties,设置上传文件的大小:
struts.multipart.maxSize=10485760
也可以直接在struts2中进行配置:
<constant name="struts.multipart.maxSize" value="10485760"/>
多文件的上传,还有下载功能实现在下一篇博客会总结。