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

yizhihongxing

下面是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 — Stream流

    注意:Stream和IO流(InputStream/OutputStream)没有任何关系,请暂时忘记对传统IO流的固有印象 传统集合的多步遍历代码 几乎所有的集合(如Collection接口或Map接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历。例如: public clas…

    Java 2023年4月22日
    00
  • SpringData JPA的常用语法汇总

    下面我将为你详细讲解SpringData JPA的常用语法汇总。 1.概述 SpringData JPA是Spring框架的一个子项目,它提供了一种非常方便的方式来简化JPA的使用,降低了编写JPA代码的复杂度。SpringData JPA主要是基于JPA规范来实现的,并对JPA规范进行了一些扩展,提供了一些更为方便的API和方法。 2.常用语法汇总 2.1…

    Java 2023年5月20日
    00
  • Java中如何使用Response重定向

    在JavaWeb中,可以使用Response对象的sendRedirect()方法进行重定向操作。该方法可以让服务器重定向到别的页面,实现页面跳转的功能。 下面是在Java中如何使用Response重定向的完整攻略: 1. 导入相关的包和类库 在使用重定向功能之前,需要先导入一些需要的包和类库。 import java.io.IOException; imp…

    Java 2023年5月26日
    00
  • Java数组使用binarySearch()方法查找指定元素的实现

    Java数组提供了许多方法来操作数组,其中一个十分方便的方法是使用binarySearch()方法来查找指定元素在数组中的位置。本文将详细讲解如何使用binarySearch()方法来查找数组中的元素。 使用binarySearch()方法查找指定元素的声明 Java数组数提供了名为binarySearch()方法的内置方法,它可以协助开发人员在数组中查找特…

    Java 2023年5月26日
    00
  • Java中ByteArrayInputStream和ByteArrayOutputStream用法详解

    Java中ByteArrayInputStream用法详解 ByteArrayInputStream是Java中处理字节数组的输入流,其用法和普通的输入流相类似。下面是ByteArrayInputStream的基本用法: // 创建一个字节数组 byte[] buf = new byte[]{1,2,3,4,5}; // 将字节数组包装为输入流 ByteAr…

    Java 2023年5月20日
    00
  • 使用java web 在jsp文件及Class中连接MySQL和SQLserver 的驱动方法

    连接 MySQL 和 SQL Server 数据库需要使用不同的驱动程序,下面我将详细介绍Java Web在JSP文件及Class中连接MySQL和SQL Server驱动的方法。 连接MySQL数据库驱动程序 步骤一:引入MySQL的JDBC驱动 在Java Web项目中连接MySQL数据库,首先需要引入MySQL JDBC驱动程序。将MySQL驱动程序的…

    Java 2023年5月20日
    00
  • Spring Security实现HTTP认证

    下面是关于“Spring Security实现HTTP认证”的完整攻略。 什么是Spring Security Spring Security是基于Spring框架的安全框架。它提供了一系列的安全服务,包括身份验证(Authentication)、授权(Authorization)等,用于保护Web应用或Web服务。 实现HTTP认证的步骤 下面是实现HTT…

    Java 2023年5月20日
    00
  • 教你如何用Eclipse创建一个Maven项目

    我将为你详细讲解“教你如何用Eclipse创建一个Maven项目”的完整攻略,过程中将涵盖以下内容: 安装Eclipse和Maven 创建Maven项目 添加依赖 编译运行 以下是具体步骤: 1. 安装Eclipse和Maven 首先,你需要安装Eclipse和Maven。你可以从官方网站下载Eclipse,也可以通过Eclipse Marketplace搜…

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