JavaWeb利用struts实现文件下载时改变文件名称

下面是Java Web利用Struts实现文件下载时改变文件名称的完整攻略:

文件下载功能的实现

在Struts框架中实现文件下载的功能需要:

  1. 在action中编写下载文件的方法。
  2. 在struts.xml配置文件中添加对应的action和result。
  3. 在前端页面中添加下载链接。

代码演示:

1. 在action中编写下载文件的方法

public class DownloadAction extends ActionSupport{

  private String fileName;    //要下载的文件名

  public InputStream getDownloadFile() throws Exception {
     //获取要下载的文件路径
     String filePath = ServletActionContext.getServletContext().getRealPath("/file/abc.txt");
     File file = new File(filePath);
     //以流的方式返回要下载的文件
     return new FileInputStream(file);
  }

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

  public void setFileName(String fileName){
     this.fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
  }

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

在以上代码中,我们定义了一个action:DownloadAction,并实现了getDownloadFile()方法和setFileName()方法。getDownloadFile()方法返回一个流,以此实现文件的下载。setFileName()方法用来解决中文乱码问题。在执行下载操作前,需要从action中获取文件名并赋值。如:

DownloadAction download = new DownloadAction();
download.setFileName("abc.txt");

2. 在配置文件struts.xml中添加对应的action和result

<struts>
  <package name="download" extends="struts-default">
    <action name="download" class="com.demo.DownloadAction">
       <result name="success" type="stream">
         <param name="contentType">application/octet-stream;charset=UTF-8</param>
         <param name="inputName">downloadFile</param>
         <param name="contentDisposition">attachment;filename="${fileName}"</param>
         <param name="bufferSize">1024</param>
      </result>
    </action>
  </package>
</struts>

以上代码中,我们新建了一个名为download的package,指定了一个名为download的action,并在result中配置了相关信息:

  1. contentType:下载文件类型,默认为二进制流。
  2. inputName:通过getDownloadFile()返回的流的名称。
  3. contentDisposition:设定下载文件的显示名称,${fileName}代表从action传递过来的文件名称。
  4. bufferSize:设定缓冲区大小,默认为1024。

3. 在前端页面中添加下载链接

在jsp页面或html页面中,可以使用如下链接来下载文件:

<a href="${pageContext.request.contextPath}/download.action?fileName=abc.txt">下载abc.txt</a>

以上代码中,href是下载的链接,fileName是要下载的文件名,这个参数将会通过setFileName()方法接收并传递到contentDisposition属性中。

改变文件下载时的名称

以下是修改下载文件时名称的方法:

在上述代码中,获取文件名称的方法是通过setFileName()方法传递参数来实现的,此处只需要将传递的文件名称改成想要的名称即可。如:

DownloadAction download = new DownloadAction();
download.setFileName("aaa.txt");

以上是将下载的文件名称修改为aaa.txt的方法。

在struts配置文件中,配置contentDisposition属性时使用了${fileName}作为文件名称的变量。所以只需要在传递文件名称时将此变量修改即可,如:

DownloadAction download = new DownloadAction();
download.setFileName("bbb.txt");

在前端页面中,只需要修改链接传递的文件名称即可:

<a href="${pageContext.request.contextPath}/download.action?fileName=bbb.txt">下载bbb.txt</a>

简单来说,要改变文件下载时的名称,只需要将从setFileName方法中获取的文件名改成你想要的名称即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaWeb利用struts实现文件下载时改变文件名称 - Python技术站

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

相关文章

  • greenbrower用到的function.js代码集合第2/2页

    “greenbrower用到的function.js代码集合第2/2页”是一个由GreenBrowser浏览器作者开发的JavaScript函数库,可以帮助开发者快速开发网页或者扩展浏览器功能。 以下是对该库的详细讲解: 下载并引入库文件 首先,你需要下载并引入该函数库到你的项目中。该函数库的下载链接为:http://greenbrowser.sourcef…

    Java 2023年6月16日
    00
  • IDEA版最新MyBatis程序配置教程详解

    下面为你详细讲解“IDEA版最新MyBatis程序配置教程详解”的完整攻略。 一、MyBatis概述 MyBatis是一款支持自定义SQL、存储过程以及高级映射的优秀持久化框架。如果你想更好地使用MyBatis,你需要了解MyBatis的运行原理及配置。 二、IDEA版最新MyBatis程序配置教程详解 2.1 创建Maven工程 首先,在IDEA中创建一个…

    Java 2023年5月19日
    00
  • Spring MVC的国际化实现代码

    Spring MVC的国际化实现代码攻略 在Spring MVC中,我们可以使用国际化来实现多语言支持。本文将详细讲解Spring MVC的国际化实现代码,包括如何配置国际化资源文件、如何使用MessageSource对象获取国际化信息等。 配置国际化资源文件 在Spring MVC中,我们可以使用.properties文件来存储国际化信息。下面是一个示例代…

    Java 2023年5月18日
    00
  • Java axios与spring前后端分离传参规范总结

    Java axios是一个基于Promise的HTTP客户端,可用于浏览器和node.js中。它的特点是易于使用和读取。以Spring前后端分离的场景中传参规范总结如下: API设计规范 RESTful 风格 API接口应该符合Restful风格,即资源(Resource)的URI应该有明确的含义,HTTP请求方法(GET, POST, PUT, DELET…

    Java 2023年5月20日
    00
  • Springboot 整合maven插口调用maven release plugin实现一键打包功能

    下面是详细的Spring Boot整合Maven插件调用Maven Release Plugin实现一键打包功能的攻略: 1. 确定依赖和插件 首先确保在pom.xml文件中引入了Maven Release Plugin和Maven Deploy Plugin: <project> <build> <plugins> &l…

    Java 2023年6月2日
    00
  • Java基础:流Stream详解

    Java基础:流Stream详解 什么是流Stream? Java中的流(Stream)是指代表数据流通的对象。Stream与java.io包中的流不同,Stream没有io操作,是一种抽象的数据结构,是一种更高级、更便捷、更优雅的处理数据的方式。Stream的目的是通过类似于流水线的方式来处理集合中的元素,通过流的操作,可以将对集合的处理变得更加简单、减少…

    Java 2023年5月26日
    00
  • mybatis插件pageHelper实现分页效果

    Mybatis插件PageHelper实现分页效果攻略 1. 前言 Mybatis是一个优秀的ORM框架,但默认不支持分页功能。如果我们想要在Mybatis中实现分页功能,需要手动在SQL语句中添加limit关键字等分页功能代码,这显然是非常繁琐和困难的,而PageHelper插件的出现解决了这一问题。本文将详细介绍如何使用PageHelper插件实现Myb…

    Java 2023年6月15日
    00
  • Java SpringBoot+vue+实战项目详解

    Java SpringBoot+Vue实战项目,可以分为后端和前端两个部分。下面将详细讲解如何使用SpringBoot和Vue来创建一个完整的Web应用程序。 后端SpringBoot SpringBoot是一个用于快速开发基于Spring框架的Web应用程序的开源框架。下面将详细讲解如何使用SpringBoot来创建一个完整的Web应用程序。 步骤1:创建…

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