package com.chen.action;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.file.Files;
import java.nio.file.Paths;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DwonAction extends ActionSupport {
private String fileName;
private String contentType;
private String filepath;
public String getContentType() throws IOException {
return Files.probeContentType(Paths.get(filepath));
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
public String getFilepath() {
return filepath;
}
public void setFilepath(String filepath) {
this.filepath = filepath;
}
public String getFileName() throws UnsupportedEncodingException {
String filepath = new String(this.filepath.getBytes("UTF-8"), "iso-8859-1");
int begin = filepath.lastIndexOf("\\");
fileName=filepath.substring(begin+1, filepath.length());
System.out.println(fileName);
return fileName;
}
public void setFileName(String fileName) throws UnsupportedEncodingException {
this.fileName = new String(fileName.getBytes("iso-8859-1"), "UTF-8");
}
public InputStream getDownLoadFile() throws IOException {
filepath = new String(filepath.getBytes("iso-8859-1"), "UTF-8");
FileInputStream stream = new FileInputStream(filepath);
return stream;
}
public String execute() throws Exception {
return SUCCESS;
}
}
<action name="dwon" class="DwonAction" method="execute">
<result name="success" type="stream">
<param name="contentType">${contentType}</param><!-- 指定下载文件类型 -->
<param name="inputName">DownLoadFile</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
</result>
</action>
注意点:文件名字上传服务器是iso8859-1编码成utf-8,下载时候要转回去,utf-8转成iso8859-1
utf-8->iso8859-1->utf-8
utf-8<-iso8859-1<-utf-8