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方法
原文:http://hw1287789687.iteye.com/blog/2307849