以前自己学习上传下载代码,贴到网上便于查阅
struts.xml中的配置
<?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>
<!-- 设置post请求参数的编码为utf-8 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- action的后缀为action -->
<constant name="struts.action.extension" value="action" />
<!-- 让浏览器不缓存 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 是否对xml配置文件使用重新加载!如果对xml进行修改,不用重启tomcat-->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 是否打开开发者模式 -->
<constant name="struts.devMode" value="false" />
<package name="test" namespace="/" extends="struts-default">
<action name="UploadAction" class="com.ll.action.UploadAction">
<result name="input">/form.jsp</result>
<!-- 自己来引入拦截器栈,那么默认的栈就不执行了 -->
<interceptor-ref name="defaultStack">
<!-- 为栈中名为fileUpload的拦截器指定名为allowedTypes这个参数指定值 -->
<param name="fileUpload.allowedTypes">image/*</param>
</interceptor-ref>
</action>
<action name="Download" class="com.ll.action.DownloadAction">
<result type="stream">
<param name="contentType">${type}</param><!-- ognl表达式,等同于调用Acton的getType()方法 -->
<param name="contentDisposition">attachment;fileName=${showName}</param>
<param name="inputName">inputStream</param>
</result>
</action>
</package>
</struts>
上传
package com.ll.action;
import java.io.File;
import org.apache.commons.io.FileUtils;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport {
private String username;// 用户名
/*
* 以下三个属性对应表单中的zhaoPian的文件表单项
*/
private File zhaoPian;// 名称必须与表单项名称相同,文件的内容
private String zhaoPianContentType;// 属性名称必须以表单项名称为前缀,文件的类型
private String zhaoPianFileName;// 属性名称必须以表单项名称为前缀,文件的名称
public void setUsername(String username) {
this.username = username;
}
public void setZhaoPian(File zhaoPian) {
this.zhaoPian = zhaoPian;
}
public void setZhaoPianContentType(String zhaoPianContentType) {
this.zhaoPianContentType = zhaoPianContentType;
}
public void setZhaoPianFileName(String zhaoPianFileName) {
this.zhaoPianFileName = zhaoPianFileName;
}
@Override
public String execute() throws Exception {
File destFile = new File("C:/", zhaoPianFileName);
FileUtils.copyFile(zhaoPian, destFile);
return null;
}
}
下载
package com.ll.action;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DownloadAction extends ActionSupport {
private InputStream inputStream = null;// 创建一个InputStream类型,名为inputStream的属性
private String type;
private String showName;
public String getType() {
return type;
}
public String getShowName() {
return showName;
}
public InputStream getInputStream() {
return inputStream;
}
@Override
public String execute() throws Exception {
String filename = "F:/f/白冰.jpg";
// 在这里给inputStream属性赋值
inputStream = new FileInputStream(filename);
// 获取文件的MIME类型
type = ServletActionContext.getServletContext().getMimeType(filename);
// 设置名称
showName = filenameEncoding("/白冰.jpg", ServletActionContext.getRequest());
return SUCCESS;
}
//处理下载时文件名中文乱码问题
public static String filenameEncoding(String filename, HttpServletRequest request) throws IOException {
String agent = request.getHeader("User-Agent"); //获取浏览器
if (agent.contains("Firefox")) {
BASE64Encoder base64Encoder = new BASE64Encoder();
filename = "=?utf-8?B?"
+ base64Encoder.encode(filename.getBytes("utf-8"))
+ "?=";
} else if(agent.contains("MSIE")) {
filename = URLEncoder.encode(filename, "utf-8");
} else {
filename = URLEncoder.encode(filename, "utf-8");
}
return filename;
}
}