以下内容是基于导入struts2-2.3.32.jar包来讲的
1.文件上传
A.单文件上传
<body>
<form action="${pageContext.request.contextPath }/one" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="上传"/>
</form>
</body>
package com.rong.web.action; import java.io.File; import org.apache.commons.io.FileUtils; import com.opensymphony.xwork2.ActionSupport; public class MyAction extends ActionSupport {
private static final long serialVersionUID = -351587239525292420L;
//保存上传的文件对象,file对应表单元素名称,名称必须一致,拦截器会解析这个格式!
private File file;
//文件名,必须为fileFileName
//FileName 固定的写法。必须为file+FileName
private String fileFileName;
//ContentType 固定的写法。必须为file+ContentType
private String fileContentType;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
} public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
@Override
public String execute() throws Exception {
//E:\apache-tomcat-7.0.82\work\Catalina\localhost\struts2\ upload_1742945b_24ed_4612_a2f4_b83cffa61620_00000000.tmp
//struts会保存到Tomcat服务器的struts2文件夹中创建临时文件,若不处理,执行完代码会把此临时文件删除
System.out.println(file.getAbsolutePath());
//butterfly.jpg
System.out.println(fileFileName);
//image/png
System.out.println(fileContentType);
File targetFile=new File("c:/", fileFileName);
FileUtils.copyFile(file, targetFile);
return SUCCESS;
}
}
文件类型: mime-type想了解的可以去Tomcat服务器的web.xml文件查看,里面有文件类型配置
E:\apache-tomcat-7.0.82\conf\web.xml
限制文件上传大小:
org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (81498) exceeds the configured maximum (1024)
<?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>
<!-- 配置限制文件上传大小为1K -->
<constant name="struts.multipart.maxSize" value="1024"></constant>
<package name="default" namespace="/" extends="struts-default" > <global-results>
<!-- struts在文件上传失败的时候,会返回input的错误视图,在这里配置对应的页面! -->
<result name="input">/input.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="one" class="com.rong.web.action.MyAction">
<result>/one.jsp</result>
</action>
</package>
</struts>
B.多文件上传
input的name属性值必须一致
<body>
<form action="${pageContext.request.contextPath }/one" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="file" name="file"/>
<input type="file" name="file"/>
<input type="submit" value="上传"/>
</form>
</body>
package com.rong.web.action; import java.io.File; import org.apache.commons.io.FileUtils; import com.opensymphony.xwork2.ActionSupport; public class MyAction extends ActionSupport {
private static final long serialVersionUID = -351587239525292420L;
//保存上传的文件对象,file对应表单元素名称,名称必须一致,拦截器会解析这个格式!
private File[] file;
//文件名,必须为fileFileName
private String[] fileFileName;
//文件类型,必须为fileContentType
private String[] fileContentType; public File[] getFile() {
return file;
} public void setFile(File[] file) {
this.file = file;
} public String[] getFileFileName() {
return fileFileName;
} public void setFileFileName(String[] fileFileName) {
this.fileFileName = fileFileName;
} public String[] getFileContentType() {
return fileContentType;
} public void setFileContentType(String[] fileContentType) {
this.fileContentType = fileContentType;
} @Override
public String execute() throws Exception {
if(file!=null){
for(int i=0;i<file.length;i++){
System.out.println(file[i]);
System.out.println(fileFileName[i]);
System.out.println(fileContentType[i]);
File targetFile=new File("c:/", fileFileName[i]);
FileUtils.copyFile(file[i], targetFile);
}
}
return SUCCESS;
}
}
E:\apache-tomcat-7.0.82\work\Catalina\localhost\struts2\upload_ca4933df_aa32_4fc4_bbd5_d5d887c68972_00000006.tmp
2018届毕业设计2017-6-8.rar
application/octet-stream
E:\apache-tomcat-7.0.82\work\Catalina\localhost\struts2\upload_ca4933df_aa32_4fc4_bbd5_d5d887c68972_00000007.tmp
nio1.png
image/png
E:\apache-tomcat-7.0.82\work\Catalina\localhost\struts2\upload_ca4933df_aa32_4fc4_bbd5_d5d887c68972_00000008.tmp
容杰龙.docx
application/vnd.openxmlformats-officedocument.wordprocessingml.document
<?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>
<!-- 配置限制文件上传大小为1000k -->
<constant name="struts.multipart.maxSize" value="10240000"></constant>
<package name="default" namespace="/" extends="struts-default" > <global-results>
<!-- struts在文件上传失败的时候,会返回input的错误视图,在这里配置对应的页面! -->
<result name="input">/input.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="one" class="com.rong.web.action.MyAction">
<result>/one.jsp</result>
</action>
</package>
</struts>
限制允许上传的文件类型以及文件扩展名:
<?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>
<!-- 配置限制文件上传大小为1000k -->
<constant name="struts.multipart.maxSize" value="10240000"></constant>
<package name="default" namespace="/" extends="struts-default" > <global-results>
<!-- struts在文件上传失败的时候,会返回input的错误视图,在这里配置对应的页面! -->
<result name="input">/input.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="one" class="com.rong.web.action.MyAction">
<!-- Action里设置默认拦截器栈 -->
<interceptor-ref name="defaultStack">
<!-- 限制允许上传的文件类型 -->
<param name="fileUpload.allowedTypes">image/png,text/plain</param>
<!-- 限制上传文件的扩展名 -->
<param name="fileUpload.allowedExtensions">txt,png,docx</param>
<!-- 以上两个参数同时配置取交集 -->
</interceptor-ref>
<result>/one.jsp</result>
</action> </package>
</struts>
如果出现异常,上传失败,却无法弹出jsp页面,可在Tomcat服务器的server.xml文件中修改:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" maxSwallowSize="-1"/>
2.文件下载
<?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>
<package name="default" namespace="/" extends="struts-default" >
<action name="download" class="com.rong.web.action.MyAction">
<!-- 下载操作,name可以随意,但需要与返回值对应。type类型唯一。 -->
<result name="down" type="stream">
<!-- 文件的类型,指定为任意二进制类型,可以标识任何文件 -->
<param name="contentType">application/octet-stream</param>
<!-- 对应的是Action类中返回流的属性!对应getFileStream()方法 -->
<param name="inputName">fileStream</param>
<!-- 指定浏览器显示的文件名,对应action类中的返回文件名的属性!需要url编码,对应getDownFile()方法 -->
<param name="contentDisposition">attachment;filename=${downFile}</param>
<!-- 读取缓冲区大小 -->
<param name="bufferSize">1024</param>
</result>
</action>
</package>
</struts>
package com.rong.web.action; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import com.opensymphony.xwork2.ActionSupport; public class MyAction extends ActionSupport {
private static final long serialVersionUID = -351587239525292420L;
private String filePath;
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
@Override
public String execute() throws Exception {
//实际开发中,用户只要传文件路径即可实现下载,这里固定路径。
filePath="C:/2017.11.17-广州市部份培训公司名单.docx";
return "down";
}
//返回流<param name="inputName">fileStream</param>
public InputStream getFileStream() throws FileNotFoundException{
return new FileInputStream(filePath);
}
//<param name="contentDisposition">attachment;filename=${downFile}</param>
public String getDownFile() throws UnsupportedEncodingException{
File file=new File(filePath);
String name = file.getName();
return URLEncoder.encode(name, "UTF-8");
}
}