`

Struts2_文件下载

 
阅读更多

第一步:xml配置

<action name="download" class="action.netDiskAction.DownloadAction">

            <!-- 文件名 -->

            <param name="fileName"></param>

            <result name="success" type="stream">

                <!-- 类型-->

                <param name="contentType">text/plain</param>

                <!-- 前台链接参数 -->

                <param name="contentDisposition">attachment;filename="${downloadChineseFileName}"</param>

                <param name="inputName">downloadFile</param>

            </result>

            <result name="downloaderror" type="chain">showResList</result>

        </action>

 

第二步: 类的实现

import java.io.File;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

 

/**

 * 个人中心资源问答下载附件实现

 */

public class DownloadAction extends ActionSupport {

    private String fileName; // 文件名和文件路径

    private String newFileName; // 用于下载后显示的文件名

    private boolean isExists; // 用户判断文件是否存在

    private int toPage; // 下载资源所在的当前页面

 

    // 从下载文件原始存放路径读取得到文件输出流

    public InputStream getDownloadFile() {

        return ServletActionContext.getServletContext().getResourceAsStream("/" + fileName);

    }

 

    // 如果下载文件名为中文,进行字符编码转换

    public String getDownloadChineseFileName() {

        String downloadChineseFileName = newFileName;

        try {

            downloadChineseFileName = new String(downloadChineseFileName.getBytes(), "ISO8859-1");

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

        }

        return downloadChineseFileName;

    }

 

    public String execute() {

        String basePath = ServletActionContext.getServletContext().getRealPath("");

        String filePath = basePath + fileName;

        File file = new File(filePath);

        if (!file.exists()) {

            HttpServletRequest request = ServletActionContext.getRequest();

            request.setAttribute("message", "文件已经不存在,请联系管理员!");

            // 如果topage为0时,说明在第一页,需要进行重新设置为1

            if (toPage == 0) {toPage = 1;}

            return "downloaderror";

        } else {

            return SUCCESS;

        }

    }

    public String getFileName() {return fileName;}

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

    public String getNewFileName() {return newFileName;}

    public void setNewFileName(String newFileName) {this.newFileName = newFileName;}

    public int getToPage() {return toPage;}

    public void setToPage(int toPage) {this.toPage = toPage;}

}

分享到:
评论

相关推荐

    K8_Struts2_EXP S2-045 & 任意文件上传 20170310

    标题中的“K8_Struts2_EXP S2-045 & 任意文件上传 20170310”指的是一个与Struts2框架相关的安全漏洞,具体为S2-045漏洞,该漏洞允许攻击者进行任意文件上传。20170310可能是漏洞被发现或公开的日期,也可能是指该...

    K8_Struts2_EXP 20170310

    1. 解压文件:首先,你需要将下载的压缩包"K8_Struts2_EXP S2-045 & 任意文件上传 20170310"解压到本地目录。 2. 运行检测:运行K8_Struts2_EXP工具,指定要扫描的Struts2项目路径。 3. 分析报告:工具会生成一个...

    K8_Struts2_漏洞利用工具解压密码:k8team

    标题中的"K8_Struts2_漏洞利用工具"是一个专门为测试和研究这些漏洞而设计的工具。它可以帮助安全研究人员和开发者了解漏洞的工作原理,以及如何检测和防御此类攻击。使用这个工具,用户可以模拟攻击者的行为,检查...

    struts2_uploadify带进度条的多文件上传下载

    总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...

    netbeans7.2_struts2_plugin

    首先,我们来看标题"NetBeans7.2_struts2_plugin",这表明我们要讨论的是在NetBeans 7.2版本中用于支持Struts2开发的插件。这个插件是NetBeans IDE为了提供Struts2框架的开发辅助工具而设计的,它包括了对Struts2...

    [轻量级Java_EE企业应用实战_Struts2_Spring3_Hibernate整合开发

    【轻量级Java_EE企业应用实战_Struts2_Spring3_Hibernate整合开发】这个主题主要涉及的是Java EE领域中的三大框架——Struts2、Spring3和Hibernate的集成应用,这是构建现代Java后端系统的一种常见方式。这些框架...

    struts2_jar

    在"struts2_jar"压缩包中,可能包含的文件除了Struts2的核心库之外,还可能有相关的示例代码、配置模板或其他辅助开发的工具。通过理解和掌握这些知识点,可以有效地利用Struts2构建高效、可维护的Web应用。

    K8_Struts2_EXP.zip

    ]10 S2-045 CVE-2017-5638 支持GetShell/获取物理路径/执行CMD命令 [+]9 devMode CVE-xxxx-xxxx 支持GetShell/获取物理路径/执行CMD...[+]1 S2-005 CVE-2010-1870 支持GetShell/获取物理路径/执行CMD命令/列文件目录

    struts2实现文件下载功能

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

    struts2 _ant.jar 文件打包下载

    `struts2_ant.jar` 文件是Struts2框架的一个组成部分,它包含了Ant构建工具相关的类和资源,Ant是一个广泛使用的Java项目自动化构建工具。 在Struts2框架中,Ant常被用来自动化项目的构建过程,如编译源代码、打包...

    Struts2_Dwr.rar_Struts2_Dwr_dwr_struts2 dwr

    在"Struts2_Dwr.rar"的压缩包中,可能包含了以下文件: 1. `struts.xml`:Struts2的配置文件,定义了Action及其相关的配置。 2. `dwr.xml`:DWR的配置文件,声明了可被JavaScript访问的服务器端方法。 3. `...

    Struts2_CRUD.rar_Struts2_CRUD_Struts2的增改删查 操作 示例_struts2_struts2

    综上所述,"Struts2_CRUD"示例涵盖了使用Struts2框架进行基本数据操作的核心概念和实践。通过学习这个示例,初学者可以理解如何在Struts2中组织Action、Form、Interceptor、配置文件和视图,以及如何实现CRUD操作和...

    Struts2_0400_Path.rar_struts2_0400_Path

    "Struts2_0400_Path"这个标题和描述暗示了这是一个关于Struts2框架中路径配置的学习资料,可能是针对Struts2的一个特定漏洞或版本更新进行的讲解。在Struts2框架中,路径配置是非常关键的部分,它涉及到请求的映射、...

    Struts 2.1.8_学习源码

    Struts 2.1.8 学习源码内容 Struts2_01FirstDemo : 跑通第一个Struts2的实例 Struts2_02CURD : 关于Struts2的增、删、改和查 实际业务中数据来自数据库,从DAO层查询...Struts2_06FileUpload : Struts2上传文件的使用

    Struts2_API.rar_API_struts2_struts2 api_struts2 api chm_struts2文

    `Struts2_API.chm`文件是一个帮助文档,通常以CHM(Compiled HTML Help)格式存在,这是一种由微软开发的、用于存储HTML文档的压缩格式,便于离线阅读。CHM文件包含索引、搜索功能,使得用户可以快速找到所需的信息...

    Struts2_s2-016&017&ognl2.6.11_patch漏洞补丁

    struts.xml文件中新增以下内容: &lt;!-- 为修复struts2 s2-016、s2-017...struts2_s2-016&017_patch.jar拷贝到lib目录下。 ognl-2.6.11.jar直接覆盖掉原有文件。 使用工具进行测试漏洞是否依然存在。 2013年7月25日

    struts2_OGNL Demo

    Struts2_OGNL Demo 是一个用于演示Struts2框架中OGNL(Object-Graph Navigation Language)表达式语言的实例。这个项目旨在帮助开发者理解和学习如何在Struts2中使用OGNL来操纵对象和数据。OGNL是Struts2中一个重要的...

    K8_Struts2_EXP S2-045 20170310.rar

    标题中的"K8_Struts2_EXP S2-045 20170310.rar"提到了一个特定的安全漏洞——S2-045,这是Struts2框架中的一个严重问题,影响了多个版本的Struts2。 S2-045漏洞,全称为"Struts2 OGNL注入漏洞",源于Struts2框架...

    struts2_api.rar_STRUTS2-API_structs2 api_struts2 api_struts2 res

    这个压缩包文件“struts2_api.rar”包含了关于Struts2框架的API文档,是开发者理解和使用Struts2框架的重要参考资料。以下是这个API文档中涵盖的关键知识点: 1. **Action接口与ActionSupport类**:在Struts2中,...

Global site tag (gtag.js) - Google Analytics