Springboot导出文件,前端下载文件方式

下面是Spring Boot导出文件、前端下载文件的攻略。

问题

有时候我们需要从Spring Boot应用中导出一些文件,如Excel、PDF或者其他格式的文件。我们如何通过前端将这些文件下载到本地?

导出文件

在Spring Boot中,我们可以借助一些开源组件实现文件的导出,常见的包括Apache POI、iText等。这里以Apache POI导出Excel文件为例。

首先,我们需要添加Maven依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

接着,我们可以创建一个Excel生成工具类,如下所示:

@Component
public class ExcelUtil {
    public static void createExcel(HttpServletResponse response) throws IOException {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet");

        // 在第0行创建标题行
        Row titleRow = sheet.createRow(0);
        titleRow.createCell(0).setCellValue("标题1");
        titleRow.createCell(1).setCellValue("标题2");
        titleRow.createCell(2).setCellValue("标题3");

        // 向后添加三行数据
        for (int i = 1; i <= 3; i++) {
            Row row = sheet.createRow(i);
            row.createCell(0).setCellValue("数据1-" + i);
            row.createCell(1).setCellValue("数据2-" + i);
            row.createCell(2).setCellValue("数据3-" + i);
        }

        // 将文件输出到客户端
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "attachment;filename=test.xlsx");
        workbook.write(response.getOutputStream());
        workbook.close();
    }
}

在上面的代码中,我们先创建一个Workbook实例,并创建一个Sheet对象。接着,在第0行创建标题列,然后向后添加三行数据。最后,我们设置响应头,将Excel文件输出到客户端。

前端下载文件

在前端,我们可以使用Ajax的方式发送请求,并借助浏览器提供的下载API实现文件的下载。下面是一个jQuery的示例:

$("#download").click(function() {
  $.ajax({
    url: "/excel",
    type: "GET",
    xhrFields: {
      responseType: 'blob'
    },
    success: function(data) {
      var a = document.createElement('a');
      var url = window.URL.createObjectURL(data);
      a.href = url;
      a.download = "test.xlsx";
      document.body.appendChild(a);
      a.click();
      window.URL.revokeObjectURL(url);
    }
  });
});

在上述代码中,我们通过Ajax请求获取Excel文件的二进制数据,使用Blob创建一个URL,通过a标签模拟点击下载按钮。在下载完成后,我们还需要释放URL以释放内存。

另外,如果需要实现跨域下载,我们可以在Spring Boot中添加CORS配置,如下所示:

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "DELETE", "PUT")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

示例代码

为了方便,我将上面的代码封装成了一个Spring Boot项目,并上传到了GitHub,你可以参考这个示例:springboot-download-demo

除了Excel文件的导出,该示例中还包括了PDF文件的导出和图片文件的下载。你可以通过访问不同的URL来测试这些功能。

希望这份攻略对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot导出文件,前端下载文件方式 - Python技术站

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

相关文章

  • java中构造方法及this关键字的用法实例详解(超详细)

    Java中构造方法及this关键字的用法实例详解 构造方法是什么 在Java中,构造方法是一种特殊的成员方法,用于创建对象时初始化对象的状态。一个类可以拥有多个构造方法,但是这些方法必须要有不同的参数列表或参数顺序。 构造方法与一般的成员方法不同,它没有返回值类型,甚至没有void关键字,因为它的返回值就是创建的对象本身。 构造方法的使用 在Java中,当我…

    Java 2023年5月26日
    00
  • 一篇文章带你入门java集合

    一篇文章带你入门Java集合 Java集合是Java编程中常用的数据结构,包含了List、Set、Map等常用的集合类型。本文将从以下几个方面介绍Java集合: Java集合的类型和概念 Java集合的基础用法 Java集合的注意事项 1. Java集合的类型和概念 集合类型 Java集合主要有以下三种类型: List(列表):有序,可以重复,例如Array…

    Java 2023年5月26日
    00
  • Java将json对象转换为map键值对案例详解

    当需要在Java程序中处理JSON对象时,常见的方式是将其解析为Java中的HashMap数据结构。以下是将JSON对象转换为Map键值对的完整攻略。 步骤一:导入依赖包 在Java代码中解析JSON对象通常需要使用第三方库,如FastJson、Jackson等。我们可以在项目的pom.xml文件中添加如下依赖: <dependency> &lt…

    Java 2023年5月26日
    00
  • Java实现多个文档合并输出到一个文档

    下面是Java实现多个文档合并输出到一个文档的攻略,包含以下几个步骤: 步骤一:准备工作 创建一个Java项目,使用Maven或Gradle构建工具管理项目依赖。 导入需要用到的相关Java类库,如Apache POI等。 步骤二:读取多个文档 使用Java中的File类打开多个需要合并的文档,将每个文档的内容读取到内存中。 使用Apache POI类库对读…

    Java 2023年5月26日
    00
  • Java时区转换及Date类实现原理解析

    Java时区转换及Date类实现原理解析 在Java中涉及到时间日期处理的时候,经常会涉及到时区的转换问题。本文将详细讲解Java中的时区转换方法及Date类的实现原理。 时区转换 概述 时区是地球上按照地理位置划分的区域,每个时区都有一个与协调世界时(UTC)相差的固定时间偏移量。在国际化的应用中,处理时区转换是非常重要的。Java提供了多种方式来处理时区…

    Java 2023年5月20日
    00
  • 浅谈Spring Boot 微服务项目的推荐部署方式

    推荐的Spring Boot微服务项目部署方式有以下几种: 1. Docker容器化部署 Docker容器化部署是将微服务应用程序与其所有依赖项打包成Docker镜像,然后将其部署到Docker容器中。使用Docker容器化部署的优点是可以快速部署和升级应用程序,并且不会影响其它应用程序。 以下是采用Docker容器化部署Spring Boot微服务项目的一…

    Java 2023年5月15日
    00
  • Java传入用户名和密码并自动提交表单实现登录到其他系统的实例代码

    要实现Java传入用户名和密码并自动提交表单实现登录到其他系统的功能,我们需要使用Java中的HttpClient库来进行POST请求,同时我们需要获取登录界面的HTML代码,以便提取出登录接口的URL、表单数据和Cookie信息等。 具体实现过程如下: 1. 导入HttpClient库 在Java项目中使用HttpClient库,需要先添加相关依赖。在Ma…

    Java 2023年5月24日
    00
  • Java 设计模式中的策略模式详情

    Java 设计模式中的策略模式 策略模式基础概念 策略模式是一种行为型设计模式,它能让你定义一些算法并将其封装到具有公共接口的独立类中。由于所有策略类都实现了相同的接口,因此它们可以自由地相互替换。 策略模式的结构 策略模式的核心在于定义一个策略接口(Istrategy),所有的算法都实现这个接口;然后定义一个上下文类(Context),这个上下文类有一个策…

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