`
heweina2007
  • 浏览: 68793 次
  • 性别: Icon_minigender_2
  • 来自: 沈阳
社区版块
存档分类
最新评论

Struts2使用注解方式实现文件下载

 
阅读更多

1.采用xml方式的实现:

1)Action:

package frontview.download.action;

import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import model.FileInfo;

import org.apache.struts2.ServletActionContext;

import common.BaseAction;

import constant.Constant;
import frontview.download.service.IFrontDownloadService;

/**
 * 软件下载Action
 * 
 * @author heweina frontview.download.action.SoftwareDownloadAction.java
 *         2011-5-5 下午12:59:07
 */
public class SoftwareDownloadAction extends BaseAction {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private IFrontDownloadService frontDownloadService;

	//服务器端文件名
	private String fileName;
	
	//下载类型
	private String type;
	
	//浏览器类型
	private String brower;

	public IFrontDownloadService getFrontDownloadService() {
		return frontDownloadService;
	}

	public void setFrontDownloadService(
			IFrontDownloadService frontDownloadService) {
		this.frontDownloadService = frontDownloadService;
	}

	public String getFileName() {
		return fileName;
	}

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

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getBrower() {
		return brower;
	}

	public void setBrower(String brower) {
		this.brower = brower;
	}


	/**
	 * 获取下载文件的输入流
	 * @return 下载文件的输入流
	 * @throws Exception
	 */
	public InputStream getInputStream() throws Exception {
		//真实路径
	    String realPath = Constant.FILEFOLODER + fileName;
	    InputStream in = null;
	    try{
	    	in = ServletActionContext.getServletContext().getResourceAsStream(realPath);
	    }catch(Exception ex){
	    	
	    }
	    return in;
	}
	
	/**
	 * 获取下载文件显示名称(客户端名称)
	 * @return 下载文件显示名称
	 * @throws Exception
	 */
	public String getDownloadFileName() throws Exception {
		String fileID = request.getParameter("fileID");
		FileInfo fileInfo = frontDownloadService.getFileClientNameByID(fileID);
		String downFileName = fileInfo.getFileClientName()+"."+fileInfo.getFileSuffix();
		try{
			//IE浏览器
			if("IE".equals(brower)){
				downFileName = java.net.URLEncoder.encode(downFileName,"UTF-8");
			}else
			downFileName = new String(downFileName.getBytes(), "ISO8859-1");
		} catch (UnsupportedEncodingException  e) {

		}

		return downFileName;
	}
	
	@Override
	public String execute() throws Exception {
		String forward = null;

		//真实路径
	    String realPath = Constant.FILEFOLODER + fileName;
	    String filePath = ServletActionContext.getServletContext().getRealPath(realPath);

	    //文件不存在
	    if(!new File(filePath).exists()){     
	    	//全部列表下载
	    	if("page".equals(type)){
	    		forward = "fileNotFound";     
	    	}
	    	//首页前六条下载
	    	if("first".equals(type)){
	    		forward = ERROR;
	    	}
	    }else{
	    	forward = SUCCESS;
	    }
	    
	    return forward;
	}
}

 

2)struts.xml

<!-- 软件下载 -->
    	<action name="softwareDownload" class="frontview.download.action.SoftwareDownloadAction"> 	
			<param name="inputPath">/upload/unknown.doc</param>
			<!-- 初始文件名 -->
			<param name="fileName">unknown.doc</param>

            <result name="success" type="stream">
            
            	<!-- 指定下载文件的文件类型,设置输出的类型为二进制流 -->
                <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
                <!-- 指定下载文件的文件位置 -->
                <param name="inputName">inputStream</param>
                <!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性 对应action类中的方法 getDownloadFileName() -->
                <param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
                <!-- 输出时缓冲区的大小 -->
                <param name="bufferSize">4096</param>
                
            </result>
            
            <result name="fileNotFound">/frontview/download/fileNotFind.jsp</result>
    		<result name="error">/frontview/download/tip.jsp</result>
        </action>

 

 2.注解方式:

1)Action:

/**
 * Copyright (C), 2011-2012, beijing ow Co., Ltd.
 * 文件名:     FileDownloadAction.java
 */
package com.ow.ovmweb.plugins.servicemanage.servicebrowse.action;

import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import javax.annotation.Resource;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.stereotype.Component;

import com.ow.core.common.BaseAction;
import com.ow.ovmweb.plugins.servicemanage.servicebrowse.model.ServiceQueryCondition;
import com.ow.ovmweb.plugins.servicemanage.servicebrowse.service.IServiceManageService;
import com.ow.tools.PropertiesTools;

/**   
 * 类描述:  文件下载的Action      
 * 修改历史:    
 * @author   heweina    
 * @version  1.0    
 * @date     2011-12-1  下午09:53:46
 * @description 
 * 其它:
 */
@Component
public class FileDownloadAction extends BaseAction {

	/**
	 */
	private static final long serialVersionUID = 1L;

	@Resource
	private IServiceManageService serviceManageService;
	
	private ServiceQueryCondition queryCondition;
	
	//当前页数
	private int curpager;
	
	//服务器端文件名
	private String fileName;
	
	private String orgID;
	
	private String serviceID;
	
	//浏览器类型
	private String brower;
	
	public IServiceManageService getServiceManageService() {
		return serviceManageService;
	}

	public void setServiceManageService(IServiceManageService serviceManageService) {
		this.serviceManageService = serviceManageService;
	}

	public String getFileName() {
		return fileName;
	}

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

	public String getBrower() {
		return brower;
	}

	public void setBrower(String brower) {
		this.brower = brower;
	}

	public ServiceQueryCondition getQueryCondition() {
		return queryCondition;
	}

	public void setQueryCondition(ServiceQueryCondition queryCondition) {
		this.queryCondition = queryCondition;
	}

	public int getCurpager() {
		return curpager;
	}

	public void setCurpager(int curpager) {
		this.curpager = curpager;
	}

	public String getOrgID() {
		return orgID;
	}

	public void setOrgID(String orgID) {
		this.orgID = orgID;
	}

	public String getServiceID() {
		return serviceID;
	}

	public void setServiceID(String serviceID) {
		this.serviceID = serviceID;
	}

	/**
	 * 获取下载文件的输入流
	 * @return 下载文件的输入流
	 * @throws Exception
	 */
	public InputStream getInputStream() throws Exception {
		//真实路径
	    String fileFolder = PropertiesTools.getValue("com/ow/ovmweb/global/constant.properties", "fileFolder");
	    String filePath = fileFolder+File.separator+fileName; 
	    InputStream in = null;
	    try{
	    	in = ServletActionContext.getServletContext().getResourceAsStream(filePath);
	    }catch(Exception ex){
	    }
	    return in;
	}
	
	/**
	 * 获取下载文件显示名称(客户端名称)
	 * @return 下载文件显示名称
	 * @throws Exception
	 */
	public String getDownloadFileName() throws Exception {
	
		String downFileName = fileName;
		try{
			//IE浏览器
			if("IE".equals(brower)){
				downFileName = java.net.URLEncoder.encode(downFileName,"UTF-8");
			}else
			downFileName = new String(downFileName.getBytes(), "ISO8859-1");
		} catch (UnsupportedEncodingException  e) {

		}

		return downFileName;
	}
	
	@Override
	@Action(value="fileDownload",results={
			@Result(name=SUCCESS, type="stream", params={"contentType","application/octet-stream;charset=ISO8859-1","inputName","inputStream",
					"contentDisposition","attachment;filename=\"${downloadFileName}\"","bufferSize","4096"}),
			@Result(name="fileNotFound", location="/pages/servicemanage/servicebrowse/tip.jsp")
	})
	public String execute() throws Exception {
		String forward = null;

		String fileFolder = PropertiesTools.getValue("com/ow/ovmweb/global/constant.properties", "fileFolder");
	    String filePath = ServletActionContext.getServletContext().getRealPath("")+File.separator+fileFolder+File.separator+fileName; 
	    
	    //文件不存在
	    if(!new File(filePath).exists()){     	   
	    	forward = "fileNotFound";         	
	    }else{
	    	forward = SUCCESS;
	    }
	    
	    return forward;
	}
}

 注意:执行过程中可能会出现如下错误:

 不是inputName配置的方法找不到,而是其中的getInputStream()方法 中的代码出现了异常,可以通过 System.out.println(in);

打印出输入流,如果为NULL的话,说明realPath路径正确,否则是这个流的realPath路径错误。

分享到:
评论
1 楼 kukuxiahuni 2014-09-04  
楼主我的报错比较奇葩:Can not find a java.io.InputStream with the name [] in the invocation stack. 我的是name的值获取不到,也就是说不知道调用哪个方法返回InputStream,这个是什么原因。请帮我看看,谢谢了http://zhidao.baidu.com/question/1510398365486090180.html?quesup2&oldq=1

相关推荐

    Struts2全注解方式实现文件上传与下载

    在本资源中,我们将探讨如何利用Struts2的注解方式来实现文件的上传和下载功能,这对于任何Web应用来说都是至关重要的特性。 首先,我们来看“注解”在Struts2中的作用。Struts2允许开发者使用注解来配置Action类,...

    struts2利用注解annotation实现文件下载

    本文将详细介绍如何使用Struts2框架结合注解(Annotation)的方式实现文件下载功能。 #### 一、Struts2框架简介 Struts2是一个基于MVC架构的Java Web应用框架,它继承了Struts1的优点,并在此基础上进行了改进。...

    Struts2使用注解实现文件的上传与下载

    本文将深入探讨如何使用Struts2的注解来实现文件的上传与下载。 首先,我们需要了解Struts2中的两个关键注解:`@Action` 和 `@Result`。`@Action`注解用于定义一个方法作为处理请求的Action,而`@Result`注解则用来...

    struts2文件上传下载源代码

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

    struts2文件上传下载(注解版)

    压缩包内可能包含了Struts2所需的jar包,如struts2-core、struts2-convention-plugin等,这些都是实现文件上传和下载功能所必需的库。 理解并掌握以上知识点,你就能构建起一个基于Struts2的文件上传下载系统。...

    Struts2+Jquery+Ajax

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

    Struts2框架及注释和用法

    Struts2提供了强大的表单验证功能,通过XML或者注解方式定义验证规则。例如,`@Size(max=10)`限制输入长度,`@NotEmpty`确保字段非空。 **7. 视图层** 视图通常由JSP页面构成,Struts2提供了标签库,如`s:property`...

    Struts 2使用注解配置Action

    通过上述注解,我们可以实现无XML配置的Struts 2应用。在实际开发中,这种注解配置方式使得代码更加简洁,降低了维护成本。同时,由于注解是编译时的元数据,编译器可以在编码阶段就检查出配置错误,提高了开发效率...

    Maven实现struts2注解

    &lt;constant name="struts.objectFactory" value="struts注解工厂类全限定名,比如:org.apache.struts2.spring.StrutsSpringObjectFactory" /&gt; &lt;package name="default" extends="struts-default"&gt; ...

    struts2 使用注解现在零配置不需要在使用struts.xml配置文件,可以直接跑

    在Struts2中,注解的引入使得开发者可以摆脱繁琐的`struts.xml`配置文件,实现“零配置”运行。 首先,让我们了解什么是注解(Annotation)。注解是Java提供的一种元数据机制,允许在源代码中嵌入信息,这些信息...

    Struts2实现单个文件多个文件上传与下载-多个拦截器

    要实现文件上传,你需要在Action类中定义一个字段,类型为`java.io.File`或`org.apache.struts2.dispatcher.multipart.FileItem`,并添加对应的`@FileUpload`注解。例如: ```java public class FileUploadAction ...

    struts2中的文件上传和下载示例

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括文件上传和下载。...以上就是Struts2中文件上传和下载的基本实现步骤和相关知识点。在实际开发中,可能还需要根据具体需求进行相应的优化和扩展。

    struts2多文件上传和下载

    这篇内容将深入讲解如何在Struts2中实现多文件的上传和下载。 1. **文件上传** 文件上传在Web应用中常常用于让用户提交各种类型的文件,如图片、文档等。在Struts2中,我们可以利用`Commons FileUpload`库来处理...

    struts2实例 自定义过滤器 文件上传下载 登录功能

    开发者需要在Action类中创建适当的字段来接收文件,并使用Struts2的`@FileUpload`注解或`CommonsFileUploadInterceptor`拦截器来处理文件。文件下载则涉及到响应头的设置,以指示浏览器以附件形式下载文件。本实例...

    简单使用注解的方式struts2的图片上传

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它在...通过以上步骤,你可以了解并实现使用注解的方式在Struts2中进行图片上传。实践这个项目,不仅能加深对Struts2注解的理解,也能提升在实际开发中的应用能力。

    使用struts2实现的文件上传功能

    在Struts2框架中实现文件上传功能是一项常见的任务,这通常涉及到用户通过表单提交文件,服务器端接收并处理这些文件。在这个场景中,我们将探讨如何使用Struts2来实现这一功能。 首先,你需要在项目中引入Struts2...

    struts2使用注解的上传下载功能

    本教程将深入讲解如何使用Struts2的注解实现上传和下载功能。 首先,`FileUploadAction.java`和`FileDownloadAction.java`是两个关键的Action类,它们分别处理文件上传和下载的逻辑。在Struts2中,Action类是业务...

    Struts2框架实现文件上传

    Struts2框架是Java Web...以上就是使用Struts2框架实现文件上传的基本步骤和涉及的知识点。在实际项目中,可能还需要考虑并发处理、性能优化、用户体验等方面的问题,但这些是实现基础功能后需要进一步考虑的扩展内容。

    struts2+ajax文件进度条的实现

    在Struts2中实现文件上传功能,通常会涉及到处理大文件、用户体验优化等问题,如显示文件上传进度条。这个场景下,我们结合Ajax技术,可以创建一个实时反馈文件上传进度的动态界面,提升用户交互体验。 首先,我们...

    Struts2 注解 Demo

    首先,Struts2的注解允许我们避免传统的XML配置,从而实现更加简洁、直观的编程方式。在`Struts2Demo`项目中,我们可以看到Action类是如何通过注解进行声明的。例如,`@Action`注解用于定义一个方法作为处理HTTP请求...

Global site tag (gtag.js) - Google Analytics