Struts2实现文件下载功能代码分享(文件名中文转码)

下面是详细的“Struts2实现文件下载功能代码分享(文件名中文转码)”攻略:

1. 背景介绍

Struts2是一个优秀的MVC框架,而文件下载是很多Web项目中常见的需求。本文将介绍如何在Struts2中实现文件下载功能,并且解决中文文件名乱码的问题。

2. 实现步骤

2.1 编写Action

首先,我们需要创建一个Action类,用于处理文件下载请求。该Action的getDownloadFile()方法用于获取要下载的文件,并且将文件以流的形式输出到response中,代码如下:

public class DownloadAction extends ActionSupport{

    // 要下载的文件名(中文名)
    private String filename;

    // 文件存放路径
    private String downloadPath = "D:\\download";

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }

    /**
     * 文件下载方法
     * @return
     * @throws IOException
     */
    public String getDownloadFile() throws IOException {
        // 设置response信息
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("APPLICATION/OCTET-STREAM");
        response.setHeader("Content-Disposition", "attachment;filename=\"" + java.net.URLEncoder.encode(filename,"UTF-8") + "\"");

        // 获取文件路径
        String filepath = downloadPath + File.separator + filename;

        // 输出文件流
        ServletOutputStream out = response.getOutputStream();
        InputStream in = new FileInputStream(filepath);
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = in.read(buffer)) != -1) {
            out.write(buffer, 0, len);
        }
        in.close();
        out.close();

        return NONE;
    }

    // setter和getter方法
    // ...
}

在上述代码中,我们在getDownloadFile()方法中设置了response的Content-Disposition头信息,用于告诉浏览器以附件的形式下载文件。同时,我们还使用java.net.URLEncoder对文件名进行了UTF-8编码,以解决中文文件名乱码的问题。getDownloadFile()方法返回的是NONE,这表示没有页面跳转。

2.2 编写jsp页面

接下来我们需要编写jsp页面,用于上传文件和下载文件。其中上传文件的jsp形式讲解此处略去,只列举下载文件的代码:

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>文件下载</title>
</head>
<body>
    <table>
        <tr>
            <td>要下载的文件名(中文名):</td>
            <td><s:textfield name="filename"/></td>
        </tr>
        <tr>
            <td></td>
            <td><s:submit value="下载"/></td>
        </tr>
    </table>
</body>
</html>

在上述代码中,我们使用<s:textfield>标签实现了输入要下载的文件名,使用s:submit标签实现了提交下载请求。

2.3 编写struts.xml配置文件

最后,我们需要在struts.xml文件中配置Action和jsp页面的映射关系。具体代码如下:

<struts>
    <package name="download" extends="struts-default">
        <action name="download" class="com.test.DownloadAction" method="getDownloadFile">
            <result name="none" type="stream">
                <param name="contentType">APPLICATION/OCTET-STREAM</param>
                <param name="inputName">inputStream</param>
                <param name="contentDisposition">attachment;filename="${filename}"</param>
                <param name="bufferSize">1024</param>
            </result>
        </action>
    </package>
</struts>

在上述代码中,我们配置了一个名为download的package,其中的action配置了映射关系。在配置中,第一个字符串表示Action名称,第二个字符串表示Action类的全路径,method属性表示要调用的Action方法名。对于返回值为NONE的Action,我们在配置文件中使用了stream类型的Result,用于输出文件流。在Result的contentDisposition参数中同样使用了中文文件名的URLEncoder编码形式。

3. 示例

我们接下来演示使用以上代码实现的文件下载功能。为此,我们在downloadPath目录下准备了一个中文文件名的文件(如“测试文件.txt”)。

3.1 示例一

在浏览器地址栏中输入下载地址,如

http://localhost:8080/download.action?filename=测试文件.txt

浏览器将自动下载名为“测试文件.txt”的文件。

3.2 示例二

使用表单提交方式下载文件。在jsp中使用以下代码:

<s:form action="download">
    <s:textfield name="filename"/>
    <s:submit value="下载"/>
</s:form>

在浏览器中访问该jsp页面,输入文件名并提交,即可下载该文件。

4. 总结

本文讲解了如何在Struts2中实现文件下载功能,并且解决了中文文件名乱码的问题。通过以上代码,您可以在您的项目中实现文件下载功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2实现文件下载功能代码分享(文件名中文转码) - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • JAVA编程不能不知道的反射用法总结

    JAVA编程不能不知道的反射用法总结 什么是反射 反射是Java中的一种特性,它允许程序在运行时检查和操作对象的属性、方法和构造函数。在Java中,可以使用java.lang.reflect包中的类实现反射。 反射用法 获取Class对象 在Java中,每个类都有一个唯一的Class对象,它保存了与类有关的信息。可以通过下面的方法获取某个类的Class对象:…

    Java 2023年5月26日
    00
  • 阿里P7面试经历JAVA总结(技术面,HR面)

    下面我会详细讲解“阿里P7面试经历JAVA总结(技术面,HR面)”的攻略。 1. 面试准备 1.1 熟悉面试流程和评价标准 熟悉面试流程和评价标准是成功的第一步。了解面试的流程,可以让你有充足的时间和精力去准备。同时,了解评价标准也可以帮助你知道自己的优势和劣势,从而着重准备相关技能。 1.2 温习基础知识 温习基础知识是非常重要的一点。阿里P7的技术面试涉…

    Java 2023年5月20日
    00
  • 第三章-Java的基本程序设计结构

      3.1一个简单的Java语言程序  这是程序虽然很简单,但是所有的Java程序都具有这种结构,因此还是值得花一些时间来研究的。首先,Java区分大小写。如果出现了大小写拼写错误(例如:将main拼写成Main),程序将无法运行。 下面逐行的查看这段源代码。关键字pubilc称为访问修饰符(access modifier),这些修饰符用于控制程序的其他部分…

    Java 2023年5月8日
    00
  • 基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法

    下面我将详细讲解“基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法”的完整攻略。 1. 获取法定节假日列表 首先,我们需要获取法定节假日的列表。这个列表可以通过国家法定节假日的规定来获得,例如中国的法定节假日列表可以通过国务院发布的公告来获取。 我们取到的列表格式可能是类似以下的内容: { "春节": [ "202…

    Java 2023年5月20日
    00
  • springboot日期格式化及时差问题分析

    下面我将为你介绍有关“springboot日期格式化及时差问题分析”的完整攻略。 1. 前言 在日常开发中,很多场景需要对时区、日期格式进行处理,如果不处理好,就可能会导致一些问题,如时差问题等,本文将介绍如何使用SpringBoot来处理日期格式化及时差问题。 2. 日期格式化 在Java中,日期格式化主要是通过SimpleDateFormat类实现。在S…

    Java 2023年5月20日
    00
  • Java 把json对象转成map键值对的方法

    将 JSON 对象转换成 Map 对象有两种方法: 1. 使用 Jackson 库 Jackson 是一个流行的 JSON 处理库,它可以轻松地将 JSON 转换成 Java 对象或 Map 对象,反之亦然。可以通过 Maven 或 Gradle 将 Jackson 依赖项添加到项目中: <dependency> <groupId>c…

    Java 2023年5月26日
    00
  • Java基础知识杂文

    Java基础知识杂文攻略 简介 Java是一门广泛应用于企业级应用软件开发的编程语言,深受开发者喜爱。本篇文章将为读者讲解Java基础知识杂文的攻略,以帮助读者更好地掌握Java编程。 步骤 步骤一:学习Java基础语法 Java基础语法包括:变量、数据类型、运算符、关键字、控制流等内容。学习Java基础语法是掌握Java编程的第一步。 示例: public…

    Java 2023年5月30日
    00
  • JSP中的源代码泄漏问题

    JSP(Java Server Pages)是一种跨平台的Web技术,它允许Java代码被嵌入到HTML页面中,以此来动态生成Web页面。但是,如果JSP页面中存在源代码泄漏的问题,攻击者可以利用这个漏洞来获取应用程序的源代码,从而非法获取系统信息,甚至进一步攻击应用程序。因此,JSP中的源代码泄漏问题是一项需要格外重视的安全问题。下面是详细讲解JSP中的源…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部