`
阅读更多

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方法

0
8
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics