`
退役的龙弟弟
  • 浏览: 453714 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2实现文件下载

 
阅读更多

注:struts2提供的下载功能,在action中只需要提供一个返回inputStream流的方法

实现文件下载的流程

jsp视图(form表单)->struts.xml(找到对应的action)->xxxAction.java(excute())->struts.xml(找到对应的result这里是“sucess”),通过inputName属性找到对应的InputStream方法->xxxAction调用getInputStream()方法,得到返回值

1.struts.xml

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
	<constant name="struts.i18n.encoding" value="utf-8"/>
    <package name="parameter" namespace="/" extends="struts-default">

        <action name="download" class="com.ru.action.downloadaction">
        
        	<param name="inputPath">\document\eeeeeeeeee.docx</param>
			<!-- struts2实现文件下载 -->
			<!-- 1.result必须配制成stream类型 -->
			<!-- 2.要配置4个属性 -->
            <result name="sucess" type="stream">
            <!-- 下载的文件类型 -->
            	<param name="contentType">application/vnd.openxmlformats-officedocument.wordprocessingml.document</param>
           	<!-- 指定getInputStream()方法返回的输入流“inputStream” -->	
           		<param name="inputName">inputStream</param>
           	<!-- 指定下载文件名 -->
           		<param name="contentDisposition">"文档"</param>
           	<!-- 指定下载文件的缓冲大小 -->
           		<param name="bufferSize">4096</param>		
            </result>
            
        </action>      
    </package>
</struts>


2.downloadaction.java

 

package com.ru.action;

import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class downloadaction extends ActionSupport{
	//struts2提供的下载功能,在action中只需要提供一个返回inpuutStream流的方法
	//通过struts.xml配置文件动态指定属性值,这个属性用来指定文件位置
	private String inputPath;
	
	public String getInputPath() {
		return inputPath;
	}
	//传递属性值的setter方法
	public void setInputPath(String inputPath) {
		this.inputPath = inputPath;
	}
	//提供inputStream流的方法
	/*注:方法名getInputStream,那么对应的struts配置文件中的inputName就必须
	*写成inputStream
	*/
	public InputStream getInputStream(){
		return ServletActionContext.getServletContext().
				getResourceAsStream(getInputPath());
	}
	@Override
	public String execute() throws Exception {
		
		return "sucess";
	}
}

注: 上面的getInputStream()方法只能用于相对路径,及tomcat下的路径

 

 

第二个例子,下载显示文件名称。

 

(1)访问连接:

function dowanloadVirusFile(virusFileName,fileName){
	window.location.href="downloadFile_virusFile.action?fileName="+fileName+"&downLoadFileName="+virusFileName;
	
}

 (2)strus.xml

 

<action name="*_virusFile" class="virusFileAction" method="{1}">
...
其他result
...

<!-- 文件下载 -->
			<result name="downloadvirus" type="stream">
				 <!-- 下载文件类型定义 --> 
				 <param name="contentType">application/octet-stream</param>
				 <!-- 下载文件输出流定义 的方法名称-->
			     <param name="inputName">downloadStream</param> 
			     <!-- 下载文件处理方式,下载是显示的文件名称 -->                 
			     <param name="contentDisposition">attachment;filename="${fileName}"</param>
			     <!-- 下载文件的缓冲大小 -->
			     <param name="bufferSize">8192</param>
			</result>
			<result name="downloadVirusFile" type="json">
				<param name="includeProperties">message</param>
			</result>

...
...
</action>

 

 (3)action.java

 

private String fileName;
public String downLoadFileName;
	
	
	
public String getDownLoadFileName() {
	return downLoadFileName;
}
public void setDownLoadFileName(String downLoadFileName) {
	this.downLoadFileName = downLoadFileName;
}


public String getFileName() {
	return fileName;
}
public void setFileName(String fileName) {
	this.fileName = fileName;
}

//action方法
public String downloadFile(){
		........一些处理代理.......
		
		return "downloadvirus";
	}

//当downloadFile()返回downloadvirus字符串后,struts开始调用getDownloadStream()方法下载文件


public InputStream getDownloadStream(){
		String virusPath = path + "/" + downLoadFileName;
		FileInputStream inputStream = null;
		
		try {
			inputStream = new FileInputStream(new File(virusPath));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return new BufferedInputStream(inputStream);
	} 

 

 

第三个例子,不实用strus的下载功能,即只需要链接

(1)连接:

<input type="button" class="derive" value="" onclick="location='licenseExport.action'">

 (2)struts.xml

<action name="licenseExport" class="sysRunConfigAction" method="licenseExport"></action>

 (3)action.java

 

 

public void licenseExport() throws Exception{
   downloadFile(licensePath, "licenseCode.txt", ServletActionContext.getResponse());
}


public static void downloadFile(String filePath,String fileName,
			javax.servlet.http.HttpServletResponse response) {

//		
		// 打开指定文件的流信息
		FileInputStream fs = null;
		File file=null;
		try {
			file=new File(filePath);
			fs = new FileInputStream(file);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return;
		}
		// 设置响应头和保存文件名
		response.setContentType("APPLICATION/OCTET-STREAM");
		response.setHeader("Content-Disposition", "attachment; filename=\""
				+ fileName + "\"");
		// 写出流信息
		int b = 0;
		try {
			PrintWriter out = response.getWriter();
			while ((b = fs.read()) != -1) {
				out.write(b);
			}
			fs.close();
			out.close();
			System.out.println("文件下载完毕!");
			//下载完删除文件
			if(null!=file&&filePath.indexOf("pkg")!=-1){
				if(file.delete())
					System.out.println("文件删除完毕!");
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("下载文件失败!");
		}
	}

 

分享到:
评论

相关推荐

    struts2实现文件下载功能

    在这个“Struts2实现文件下载功能”的示例中,我们将深入探讨如何利用Struts2框架来实现在web应用中让用户下载文件的功能。 首先,我们需要理解文件下载的基本原理。在Web应用中,当用户点击一个链接或提交一个表单...

    Struts2实现文件下载

    在Struts2中实现文件下载是一项常见的需求,例如用户请求查看或保存服务器上的文件。下面将详细解释如何在Struts2框架下实现文件下载的功能。 首先,理解基本原理:文件下载通常涉及两个主要步骤。第一步是服务器端...

    struts2实现文件下载实例源代码

    在Struts2中实现文件下载的功能,可以帮助用户从服务器获取并保存文件到本地计算机,例如这里的"1.xls"文件。下面我们将深入探讨如何在Struts2框架下实现文件下载的实例。 首先,我们需要在项目的Web应用目录结构中...

    struts2实现文件上传下载

    本篇文章将详细探讨如何在Struts2框架下实现文件的上传与下载。 首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在...

    Struts2实现文件的上传下载

    在本项目中,我们关注的是如何使用Struts2来实现实时的文件交互操作,即文件的上传与下载。 文件上传在Web应用中很常见,例如用户提交表单时可能需要附加文件,如简历、图片或文档等。Struts2提供了一套完整的机制...

    struts2实现多文件上传下载

    网上的Struts2进行的文件下载一般都是单文件或者固定的文件,并没有(很少)实现随意文件的下载的例子 提供多文件上传,上传成功后,提供刚上传的文件下载功能(其他的都可以在其上面进行扩充) 多文件 上传 下载...

    struts2文件上传下载源代码

    描述中的链接指向了CSDN博主johnjobs的一篇文章,这篇文章详细解释了如何在Struts2中实现文件上传。博主可能讨论了以下关键点: 1. **配置Struts2 Action**:在`struts.xml`配置文件中,你需要定义一个Action,该...

    struts2帮助文档

    struts2中实现文件上传 struts2中实现CRUD struts2中的OGNL struts2的新表单标志的使用 struts2与AJAX一 struts2与AJAX二 struts2与AJAX三 struts2中用Spring实现IOC struts2中的零配置与IOC struts2介绍之使用连接...

    Struts2+Jquery+Ajax

    Struts2作为Controller层,通过Action类来实现业务逻辑,并通过配置文件或注解来定义Action与URL的映射关系。 Jquery是一个高效的JavaScript库,简化了HTML文档遍历、事件处理、动画以及Ajax交互。它使得开发者能更...

    struts实现的文件上传下载功能

    总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。

    struts与hibernate实现文件的上传与动态下载

    本篇文章将详细讲解如何利用Struts2.2和Hibernate3.6实现文件的上传与动态下载。 **一、文件上传** 1. **环境配置**:首先,你需要一个集成开发环境,例如MyEclipse8.6,并安装所需的Struts2.21、JUnit4.8.2以及...

    Struts2接口文档

    这个“Struts2接口文档”是开发者的重要参考资料,提供了关于Struts2框架内各个组件、类库以及接口的详细说明,帮助开发者深入理解框架的内部工作原理并有效地使用其功能。 Struts2的核心组件包括Action、Result、...

    struts2中文学习文档

    从给定的文件信息来看,标题“struts2中文学习文档”和描述“struts2的根本webwork2”表明这是一份关于Struts2框架的学习资料,特别强调了Struts2与WebWork2的关系。Struts2是Apache Struts的一个版本,它是一个用于...

    Struts的文件下载

    在Struts中实现文件下载是一项常见的功能,尤其在处理用户请求获取服务器上的静态或动态资源时。这篇博文将深入探讨如何在Struts框架下实现文件下载的功能。 首先,我们需要了解文件下载的基本原理。当用户点击下载...

    Struts2文件上传和下载教程

    Struts2提供了内置的支持来实现文件下载,通过配置`&lt;result&gt;`元素的类型为`stream`来指定下载行为。 ```xml &lt;param name="contentType"&gt;application/octet-stream &lt;param name="inputName"&gt;byteArray ...

    Struts2文件流方式导出下载excel、Txt、image图片

    通过上述步骤,我们就可以在Struts2框架下实现文件流方式的下载功能,无论是Excel、TXT还是图片,都能有效地直接返回给浏览器,让客户端进行下载。这种方式既节省了服务器资源,也提高了用户体验。在实际项目中,...

    eclipse下利用struts2实现文件的上传和下载

    在Eclipse环境中,使用Struts2框架实现文件的上传和下载是常见的Web开发任务。Struts2是一个强大的MVC框架,提供了丰富的功能来处理用户请求和响应,包括文件操作。以下是一个详细的步骤和知识点解析: 1. **Struts...

    struts1和struts2分别实现文件上传下载功能

    Struts1和Struts2是两个非常著名的Java Web框架,它们都提供了处理文件上传和下载的功能,但实现方式有所不同。本文将深入探讨这两个框架在文件操作方面的具体实现。 首先,让我们了解一下Struts1中的文件上传功能...

Global site tag (gtag.js) - Google Analytics