Struts2 下载文件
使用框架:Struts2
(1)pom.xml配置
<properties> <java.version>1.6</java.version> <tomcat.version>7.0.26</tomcat.version> <struts2.version>2.3.4.1</struts2.version> <spring.version>3.2.3.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts2.version}</version> <exclusions> <exclusion> <artifactId>tools</artifactId> <groupId>com.sun</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-json-plugin</artifactId> <version>${struts2.version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.14.3</version> </dependency>
(2)Struts配置文件
<!-- 下载指定的单个文件 --> <action name="downloadOneFile" class="downloadOneFileAction"> <!-- 上传大小限制见struts主配置文件中的常量 struts.multipart.maxSize --> <result type="stream" name="success"> <param name="inputName">downloadFile</param> <param name="contentType">application/x-zip-compressed</param> <param name="contentDisposition">attachment;filename=${filename}</param> <param name="bufferSize">4096000</param> </result> </action>
注意:result的type属性值必须是stream
(3)action
package com.shop.jn.action.upload;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.common.action.upload.SUploadAction;
import com.common.util.ZipUtil;
import com.io.hw.file.util.FileUtils;
import com.shop.jn.entity.FileLinuxBean;
import com.shop.jn.util.ShopUtils;
import com.string.widget.util.ValueWidget;
/***
* 下载单个文件.
*
* @author huangwei
*
*/
public class DownloadOneFileAction extends SUploadAction {
private static final long serialVersionUID = -3547982986077322220L;
/**
* 单独下载zip中的文件时为null
*/
private String filename;
// private String filepa;
private String fileInZip;
private int fileId;
/***
* 不是绝对路径,只是文件名
*/
private String zipFilename;
private boolean isFileInzip;
public InputStream getDownloadFile() throws Exception {
FileLinuxBean bean=null;
try {
bean = ShopUtils.getFileLinuxBean(fileId);
} catch (NullPointerException e) {
e.printStackTrace();
return null;
}
String filepa = bean.getFilepath();
if (isFileInzip) {// 下载zip中的文件
this.filename = fileInZip.substring(fileInZip.indexOf("/") + 1);
return ZipUtil.getInputStreamFromZip(new File(filepa), fileInZip);
} else {// 下载upload 中的文件
this.filename = bean.getFilename();
BufferedInputStream in = FileUtils
.getBufferedInputStreamFromFile(filepa);// SystemUtil.convertISO2UTF(
int length = in.available();
System.out.println("stream length:" + length);
ServletActionContext.getResponse().addHeader("Content-Length",
String.valueOf(length));
return in;// filepath
}
}
public String execute() throws Exception {
// System.out.println("download:" + filename);
// if (StringUtils.isEmpty(this.filename)) {
// this.filename = SystemUtil.getFileSimpleName(filepa);
// }
return SUCCESS;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public boolean isFileInzip() {
return isFileInzip;
}
public void setIsFileInzip(boolean isFileInzip) {
this.isFileInzip = isFileInzip;
}
public String getZipFilename() {
return zipFilename;
}
public void setZipFilename(String zipFilename) {
this.zipFilename = zipFilename;
}
public int getFileId() {
return fileId;
}
public void setFileId(int fileId) {
this.fileId = fileId;
}
public String getFileInZip() {
return fileInZip;
}
public void setFileInZip(String fileInZip) {
this.fileInZip = fileInZip;
}
}
注意:Struts配置文件中inputName 的值为downloadFile,所以action中有downloadFile 的getter方法