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路径错误。
分享到:
相关推荐
在本资源中,我们将探讨如何利用Struts2的注解方式来实现文件的上传和下载功能,这对于任何Web应用来说都是至关重要的特性。 首先,我们来看“注解”在Struts2中的作用。Struts2允许开发者使用注解来配置Action类,...
本文将详细介绍如何使用Struts2框架结合注解(Annotation)的方式实现文件下载功能。 #### 一、Struts2框架简介 Struts2是一个基于MVC架构的Java Web应用框架,它继承了Struts1的优点,并在此基础上进行了改进。...
本文将深入探讨如何使用Struts2的注解来实现文件的上传与下载。 首先,我们需要了解Struts2中的两个关键注解:`@Action` 和 `@Result`。`@Action`注解用于定义一个方法作为处理请求的Action,而`@Result`注解则用来...
描述中的链接指向了CSDN博主johnjobs的一篇文章,这篇文章详细解释了如何在Struts2中实现文件上传。博主可能讨论了以下关键点: 1. **配置Struts2 Action**:在`struts.xml`配置文件中,你需要定义一个Action,该...
压缩包内可能包含了Struts2所需的jar包,如struts2-core、struts2-convention-plugin等,这些都是实现文件上传和下载功能所必需的库。 理解并掌握以上知识点,你就能构建起一个基于Struts2的文件上传下载系统。...
Struts2作为Controller层,通过Action类来实现业务逻辑,并通过配置文件或注解来定义Action与URL的映射关系。 Jquery是一个高效的JavaScript库,简化了HTML文档遍历、事件处理、动画以及Ajax交互。它使得开发者能更...
Struts2提供了强大的表单验证功能,通过XML或者注解方式定义验证规则。例如,`@Size(max=10)`限制输入长度,`@NotEmpty`确保字段非空。 **7. 视图层** 视图通常由JSP页面构成,Struts2提供了标签库,如`s:property`...
通过上述注解,我们可以实现无XML配置的Struts 2应用。在实际开发中,这种注解配置方式使得代码更加简洁,降低了维护成本。同时,由于注解是编译时的元数据,编译器可以在编码阶段就检查出配置错误,提高了开发效率...
<constant name="struts.objectFactory" value="struts注解工厂类全限定名,比如:org.apache.struts2.spring.StrutsSpringObjectFactory" /> <package name="default" extends="struts-default"> ...
在Struts2中,注解的引入使得开发者可以摆脱繁琐的`struts.xml`配置文件,实现“零配置”运行。 首先,让我们了解什么是注解(Annotation)。注解是Java提供的一种元数据机制,允许在源代码中嵌入信息,这些信息...
要实现文件上传,你需要在Action类中定义一个字段,类型为`java.io.File`或`org.apache.struts2.dispatcher.multipart.FileItem`,并添加对应的`@FileUpload`注解。例如: ```java public class FileUploadAction ...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括文件上传和下载。...以上就是Struts2中文件上传和下载的基本实现步骤和相关知识点。在实际开发中,可能还需要根据具体需求进行相应的优化和扩展。
这篇内容将深入讲解如何在Struts2中实现多文件的上传和下载。 1. **文件上传** 文件上传在Web应用中常常用于让用户提交各种类型的文件,如图片、文档等。在Struts2中,我们可以利用`Commons FileUpload`库来处理...
开发者需要在Action类中创建适当的字段来接收文件,并使用Struts2的`@FileUpload`注解或`CommonsFileUploadInterceptor`拦截器来处理文件。文件下载则涉及到响应头的设置,以指示浏览器以附件形式下载文件。本实例...
Struts2是一个强大的MVC(模型-视图-控制器)框架,它在...通过以上步骤,你可以了解并实现使用注解的方式在Struts2中进行图片上传。实践这个项目,不仅能加深对Struts2注解的理解,也能提升在实际开发中的应用能力。
在Struts2框架中实现文件上传功能是一项常见的任务,这通常涉及到用户通过表单提交文件,服务器端接收并处理这些文件。在这个场景中,我们将探讨如何使用Struts2来实现这一功能。 首先,你需要在项目中引入Struts2...
本教程将深入讲解如何使用Struts2的注解实现上传和下载功能。 首先,`FileUploadAction.java`和`FileDownloadAction.java`是两个关键的Action类,它们分别处理文件上传和下载的逻辑。在Struts2中,Action类是业务...
Struts2框架是Java Web...以上就是使用Struts2框架实现文件上传的基本步骤和涉及的知识点。在实际项目中,可能还需要考虑并发处理、性能优化、用户体验等方面的问题,但这些是实现基础功能后需要进一步考虑的扩展内容。
在Struts2中实现文件上传功能,通常会涉及到处理大文件、用户体验优化等问题,如显示文件上传进度条。这个场景下,我们结合Ajax技术,可以创建一个实时反馈文件上传进度的动态界面,提升用户交互体验。 首先,我们...
首先,Struts2的注解允许我们避免传统的XML配置,从而实现更加简洁、直观的编程方式。在`Struts2Demo`项目中,我们可以看到Action类是如何通过注解进行声明的。例如,`@Action`注解用于定义一个方法作为处理HTTP请求...