struts2下载文件

在网上查了很多,发现很多demo都是使用的struts2标签实现下载的,我自己在这里使用HTML写一个下载,方便自己理解

1、下载的链接

<a href="downloadFile.action">下载没有参数</a><br>
<a href="downloadFileparam.action?directory=D:/&filename=log.txt">下载传递参数</a><br>

2、配置文件

<!-- 下载文件 -->
<action name="downloadFile" class="downloadFileSpring">
	<param name="directory">C:/dzh/internet/</param>
	<result name="success" type="stream">
		<!-- 指定下载文件的内容类型,text/plain是默认类型 -->
		<param name="contentType">text/plain</param>
		<!--
		inputName默认值是inputStream,如果action中用于读取下载文件内容的属性名是inputStream,那么可以省略这个参数
		-->
		<param name="inputName">inputStream</param>
		<!--静态获取文件名,将文件名写死了即huangbiao.doc-->
		<param name="contentDisposition">
			attachment;filename="huangbiao.doc"
		</param>
		<param name="bufferSize">2048</param>
	</result>
	<result name="input">/WEB-INF/pages/inputError.jsp</result>
</action>

<action name="downloadFileparam" class="hb.ajax.DownloadFileparam">
	<!--默认的路径是c:/dzh/internet,但是如果传递了参数就会被覆盖-->
	<param name="directory">C:/dzh/internet/</param>
	<result name="success" type="stream">
		<!-- 指定下载文件的内容类型,text/plain是默认类型 -->
		<param name="contentType">text/plain</param>
		<!--
		inputName默认值是inputStream,如果action中用于读取下载文件内容的属性名是inputStream,那么可以省略这个参数
		-->
		<param name="inputName">inputStream</param>
		<!--动态获取文件名,从Action中的取得filename-->
		<param name="contentDisposition">
			attachment;filename=${filename}
		</param>
		<param name="bufferSize">2048</param>
	</result>
	<result name="input">/WEB-INF/pages/inputError.jsp</result>
</action>

备注:

1、inputName是返回数据流的方法的名称,即配置文件根据它找到对应的方法接受数据流,默认是inputStream,也就是说如果配置文件中没有这个配置,那么在对应的action中要有getInputSteam()方法。 

2、filename=${filename}需要对应的action中有对应的getFilename()方法

3、通过上面的配置文件可以看出,如果想实现全面的动态下载文件,就必须在上传文件的时候讲需要的信息——文件名称、文件类型、文件路径存储到数据库中,这样下载就能保证和上传是一致的(弹出下载对话框)。

3、对应的Action

package hb.ajax;

import java.io.FileInputStream;
import java.io.InputStream;

import com.opensymphony.xwork2.ActionSupport;

public class DownloadFile extends ActionSupport {

	private String filename;
	private String directory;

	public String getFilename() {
		return filename;
	}

	public void setFilename(String filename) {
		this.filename = filename;
	}

	public String getDirectory() {
		return directory;
	}

	public void setDirectory(String directory) {
		this.directory = directory;
	}

	@Override
	public String execute() throws Exception {
		System.out.println("success  ----  jjj");
		return "success";
	}

	public InputStream getInputStream() throws Exception {
		//获取配置文件中的参数值,故打印的结果C:/dzh/internet/
		System.out.println(this.directory);
		//配置文件中没有默认值,故打印的结果为null
		System.out.println(this.filename);
		String dir = directory + "aaa.docx";
		return new FileInputStream(dir); // 如果dir是绝对路径
		// return
		// ServletActionContext.getServletContext().getResourceAsStream(dir);
		// //如果dir是Resource下的相对路径
	}

}
package hb.ajax;

import java.io.FileInputStream;
import java.io.InputStream;

import com.opensymphony.xwork2.ActionSupport;

public class DownloadFileparam extends ActionSupport {

	private String filename;
	private String directory;

	public String getFilename() {
		return filename;
	}

	public void setFilename(String filename) {
		this.filename = filename;
	}

	public String getDirectory() {
		return directory;
	}

	public void setDirectory(String directory) {
		this.directory = directory;
	}

	@Override
	public String execute() throws Exception {
		System.out.println("success  ----  jjj");
		return "success";
	}

	public InputStream getInputStream() throws Exception {
		// 有前端传递过来的参数,将默认的值覆盖了,故打印的结果D:/
		System.out.println(this.directory);
		// 有前端传递过来的参数,故打印的结果为log.txt
		System.out.println(this.filename);
		String dir = directory + this.filename;
		return new FileInputStream(dir); // 如果dir是绝对路径
		// return
		// ServletActionContext.getServletContext().getResourceAsStream(dir);
		// //如果dir是Resource下的相对路径
	}

}

  

猜你喜欢

转载自hbiao68.iteye.com/blog/1752543
今日推荐