【springboot下载文件】

SpringBoot文件上传下载工具类完整指南 本文提供了一个完整的Spring Boot文件上传下载解决方案,包含以下核心内容:1. Maven依赖配置和项目目录结构;2. 文件上传工具类(FileUploadUtil)实现文件校验、目录创建、唯一文件名生成和文件保存功能;3. 文件下载工具类(FileDownloadUtil)支持普通下载、在线预览和断点续传;4. 控制器示例展示API调用方式;5. 相关配置文件说明;6. 前端调用示例HTML页面;7. 注意事项包括安全考虑、性能优化和存储策略;8. 常见问题解决方案如中文乱码、文件大小限制等。该方 阅读详情

概要

springboot实现文件下载和导入

例如:

  • 下载导入模板,上传文件进行导入

文件下载

方式一:下载服务器上的文件模板

下面展示一些 文件下载工具类。

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

public class FileUtils {
    public static void download(HttpServletResponse response, String filePath, String fileName){

        try {
            //通用的mime类型
            response.setContentType("application/octet-stream");
            //会出现文件名乱码问题
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));
            //以下设置请求头能解决下载的文件名乱码问题
            response.setHeader("Content-Disposition", "attachment;filename=;filename*=utf-8''"+URLEncoder.encode(fileName,"UTF-8"));
            InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath);
            writeBytes(is, response.getOutputStream());
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private static void writeBytes(InputStream is, OutputStream os) {
        try {
            byte[] buf = new byte[1024];
            int len = 0;
            while((len = is.read(buf))!=-1)
            {
                os.write(buf,0,len);
            }
        }catch (Exception e) {
            throw new RuntimeException(e);
        }finally {
            if(is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if(os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

controller接口层

    @ApiOperation("下载通讯录模板")
    @GetMapping("download_template")
    public Result download(HttpServletResponse httpServletResponse) {
        String fileName = "通讯录导入模板.xlsx";
        String filePath = "template/" + fileName;
        FileUtils.download(httpServletResponse,filePath,fileName);
        return Result.success();
    }

提示:要下载的文件要放在resource下,可创建自定义文件夹

方式二:通过代码创建excel响应给页面

例如:

  • 通过代码创建excel文件,通过流的方式响应给页面
// 创建一个新的工作簿和工作表
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Data");
        sheet.setDefaultColumnWidth(12);
        // 创建流量卡厂商选项列表
        TrafficCardManufacturerEnum[] manufacturers = TrafficCardManufacturerEnum.values();
        List<String> manufacturerOptions = new ArrayList<>();
        for (TrafficCardManufacturerEnum manufacturer : manufacturers) {
            manufacturerOptions.add(manufacturer.getLabel()); // 添加枚举值的名称到选项列表
        }
        // 创建下拉框单元格样式
        DataValidationHelper validationHelper = sheet.getDataValidationHelper();
        DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(manufacturerOptions.toArray(new String[0]));
        CellRangeAddressList addressList = new CellRangeAddressList(1, 1000, 3, 3); // 假设有1000行数据,"性别"列是第二列(索引为1)
        DataValidation validation = validationHelper.createValidation(constraint, addressList);
        validation.setShowErrorBox(true);
        sheet.addValidationData(validation);
        // 创建表头行
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("设备ID");
        // 创建设备名称单元格,并设置文字为红色
        Cell deviceNameCell = headerRow.createCell(1);
        deviceNameCell.setCellValue("设备名称");
        // 创建字体,并设置为红色
        Font font = workbook.createFont();
        font.setColor(HSSFColor.HSSFColorPredefined.RED.getIndex()); // 字体颜色为红色
        // 创建样式,并将字体应用于样式
        CellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setFont(font);
        deviceNameCell.setCellStyle(cellStyle);
        headerRow.createCell(2).setCellValue("相机号");
        headerRow.createCell(3).setCellValue("流量卡厂商");
        headerRow.createCell(4).setCellValue("流量卡号");
        headerRow.createCell(5).setCellValue("username");
        headerRow.createCell(6).setCellValue("password");
        headerRow.createCell(7).setCellValue("dtu");
        headerRow.createCell(8).setCellValue("主板号");
        Cell notes = headerRow.createCell(9);
        notes.setCellValue("注:标记红色为必填,流量卡和流量卡厂商必须同时存在,设备ID不填时会自动生成,一次最多导入1000条");
        notes.setCellStyle(cellStyle);
        // 将工作簿写入ByteArrayOutputStream
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        workbook.write(outputStream);
        workbook.close();
        // 设置HTTP响应头
        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
        response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=template.xlsx");
        // 将Excel文件写入响应输出流
        ServletOutputStream outStream = response.getOutputStream();
        outStream.write(outputStream.toByteArray());
        outStream.flush();
使用Spring Boot实现文件下载功能 通过创建一个RestController处理文件下载请求,并设置响应头和输出文件流,实现了简单而有效的文件下载功能。文件下载是Web应用中常见的功能之一,通过Spring Boot可以很方便地实现文件下载功能。本文将详细介绍如何使用Spring Boot编写一个简单的文件下载接口,包括处理文件下载请求、设置响应头和实现文件流输出等。可以使用Spring Initializr(https://start.spring.io/)快速生成一个基础的Spring Boot项目,添加Web依赖即可。 阅读详情

相关推荐

SpringBoot如何下载压缩文件

目标 下载文件 将文件压缩 好处是可以原始文件完整行。 实现代码 通过查阅资料和自己实践,总结下列代码: 文件压缩 无需其他引用。 package com.data.warehouse.utils; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import ja

爱码士的博客 2441

SpringBoot实现文件下载

本文纯属转载,主要是为了方便后续参考和继续使用,转载自博客Spring Boot项目实现下载项目根目录下指定目录(doc)里的文件。 代码参考如下: 一、接收页面下载的请求,开始下载项目中的文件 @RequestMapping("downloadFile") @ResponseBody public void Download(HttpServletResponse response) {...

polo2044的专栏 1万+

SpringBoot项目中获取(下载)业务功能的导入数据模板文件

在实际业务场景中,经常会遇到某些管理功能需要数据导入共功能,但既然是导入数据,肯定会有规则限制,有规则就会有数据模板,但这个模板一般是让客户自己下载固定规则模板,而不是让客户自己随便上传模板。下面介绍直接下载模板。1、在项目的 resource 包下创建 template 目录专门用来存放模板文件。2、把模板文件放入此目录中。3、 编写下载模板接口代码。5、成功下载模板文件。

hkl_Forever的博客 1010

springboot下载模板文件

springboot下载文件

Win_Dan的博客 1199

疲劳容器的定义_FKM规范针对非焊接构件疲劳强度评估实例介绍(下篇)

一、写在前面FKM Inside ANSYS软件,该软件是在FKM 规范的基础上,在ANSYS Workbench内开发的进行非焊接构件及焊缝静强度和疲劳强度评估的工具包。基于ANSYS计算模型的信息,在图形用户界面定义相关设置,利用有限元分析计算结果,自动嵌入FKM规范要求的静强度计算和疲劳强度计算流程和方法,自动将应力结果和相关物理量传递给工具包,无须手动预先选择评估的热点区域,可以...

weixin_35925298的博客 1885

基于51单片机+SYN6288语音播报

51单片机控制SYN6288语音播报资料SYN6288模块原理图语音合成命令接线如何接线实现原理程序代码main.csyn6288.cuart.cdelay.c基于 51单片机的其他项目基于51单片机+遥控灯基于51单片机+LCD1602显示基于51单片机+红外遥控解码+LCD1602显示基于51单片机+DHT11温湿度+LCD1602显示基于51单片机+DS18B20温度测温器+LCD1602显示尾声 资料 我用的是绿深电子技术的模块,资料也挺齐全的。也有相关例程。 SYN6288模块原理图 语音合成

weixin_47457689的博客 3万+

Springboot 下载文件

Springboot下载文件比较简单,以下是代码: 目录结构 FileUtil为文件工具类,里面包括下载的方法,以下为FileUtil的代码: public class FileUtil { public static void download(String filename, HttpServletResponse res) throws IOException { ...

weixin_38168947的博客jAbP)aWAuNkA 5万+

FreeFEM++下载安装和使用

最近要利用机器学习求解一些偏微分方程,对于一些复杂的偏微分方程,需要一些精度比较高的参考解,导师推荐了FreeFEM++软件。首次使用,特此记录一下,以备以后查阅。 1、FreeFEM++简介 FreeFEM是开源的有限元模拟系统,有法国利翁斯实验室、埃尔和玛丽居里大学共同开发,在世界范围内广泛使用。 2、FreeFEM++去何处下载? 下载地址:https://freefem.org/ 点击Download,然后会跳转到 https://github.com/FreeFem/FreeFem-source

夜晓岚的博客 1万+

springboot文件下载

JAVA后台实现文件下载 使用springboot框架,我在本地项目中放了一个文件,然后前台来下载该文件。本人遇到的比较明显的问题: spring获取当前项目路径 String downloadPath = ClassUtils.getDefaultClassLoader().getResource(&quot;&quot;).getPath(); 下载路径中文乱码下载路径中文乱码 解决方法:filePath...

沐秭兮兮丶的博客 1万+

YOLOv8改进 | 主干网络 | 在backbone添加Swin-Transformer层【论文必备】

YOLOv8改进,Swin-Transform,YOLOv8添加Swin-Transform

kay_545 2367

基于STM32单片机的环境监测系统设计与实现

综上所述,基于STM32单片机的环境监测系统具有良好的实时性、准确性和稳定性,能够满足环境监测的需求。本系统的研究意义在于,首先,它能够为用户提供准确的室内空气质量信息,帮助用户了解室内环境的质量状况,从而采取相应的措施来改善室内环境。本文设计并实现了一种基于STM32单片机的环境监测系统,该系统能够实时监测并显示室内环境的温湿度、甲醛浓度以及二氧化碳浓度,为用户提供准确的空气质量信息。实验过程中,我们模拟了不同的环境条件,包括温湿度变化、甲醛和二氧化碳浓度的波动等,以测试系统的实时性、准确性和稳定性。

3254968421的博客 2万+

vue+springboot使用文件流实现文件下载

本次将使用vue和springboot通过文件流的方式教大家怎么去实现文件的下载

xc9711的博客 1万+

【MicroPython编程-ESP32篇:设备驱动】-BNO08X系列传感器驱动

BNO08X 系列(BNO085/BNO086)是一款系统级封装 (SiP),集成了三轴加速度计、三轴陀螺仪、磁力计以及运行 CEVA SH-2 固件的 32 位 ARM® Cortex™-M0+ 微控制器。SH-2 包含 MotionEngine™ 软件,该软件提供复杂的信号处理算法来处理传感器数据,并提供精确的实时 3D 姿态、航向、校准加速度和校准角速度,以及更高级的上下文输出。BNO08X 集成在一个 28 引脚 LGA 封装中,尺寸为 3.8mm x 5.2mm x 1.1mm。它兼容 Andro

视觉与物联智能 696

spring boot 文件下载接口

文章目录spring boot 文件下载接口通过ResponseEntity实现通过写HttpServletResponse的OutputStream实现 spring boot 文件下载接口 Springboot对资源的描述提供了相应的接口,其主要实现类有ClassPathResource、FileSystemResource、UrlResource、ByteArrayResource、 ServletContextResource和InputStreamResource。 ClassPathResou

西京刀客 1万+

一篇文章认识《双目立体视觉》

双目立体视觉,由两个摄像头组成,像人的眼睛能看到三维的物体,具有深度的信息;单目视觉只能看到二维的物体。 1)双目摄像头 2)双目相机基线 3)打开双目摄像头 4)双目测距 视差disparity、 极线约束、 极线校正/立体校正、 a.双目标定 b.双目矫正 c.立体匹配 d.双目测距(三角测量) e.测距效果 立体视觉方法评测网站

黎国溥 7961

【Python机器学习】主成分分析(PCA):高维数据的“瘦身术“

主成分分析(PCA)的历史可以追溯到1901年,当时Karl Pearson首次提出了这个概念。在计算机还不存在的年代,PCA是一个纯粹的数学构想,用来简化多变量数据的分析。几十年后,当计算机出现时,PCA成为了数据分析中最早实现的算法之一。从那时起,超过一个世纪的发展中,PCA一直保持着其核心的理论框架和实用价值,这本身就是对这个方法深刻科学性的证明。在现代深度学习时代,许多人可能会认为PCA已经过时了。但事实恰好相反。

nmdbbzcl的博客 981

springboot:各种下载文件的方式

springboot:各种下载文件的方式

拒绝熬夜啊的博客 2万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

springboot如何实现文件下载呢?

springboot实现文件下载的方法分享

qq_25073223的博客 5663

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

springboot 文件下载

org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。当然,在出现错误时,我在想是不是application/octet-stream的问题,也使用过multipart/form-data,但也是一样的结果。在springboot中,执行如下代码实现文件下载。找了很久的解决方法,但是没有发现什么正确的答案。

m0_73512487的博客 1496

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SpringBoot实现 文件上传&下载

使用SpringBoot 实现文件的分块上传、异步下载

qq_51602170的博客 1827

SpringBoot文件下载-下载指定路径下的文件

下载指定路径下的文件 Controller代码 import com.thunisoft.jy.imp.utils.DownloadFileUtil; import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.InputStreamResource; i...

wangyucui123的博客 3万+

SpringBoot 文件模板下载

【代码】SpringBoot 文件模板下载。

weixin_60334657的博客 195

SpringBoot文件下载

SpringBoot文件下载 前言 文件下载有的细节掌握的不是很好,只是会cv,然后调用,实现方法,整理下springboot文件下载实现的模板,以后参照这个模板进行改造即可 1.新建springboot项目引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-in

java技术博客 2392

springboot实现文件下载接口

1. 导入依赖 <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> 2. controller接口实现 就几行代码,分析一下,根据自己的需要改动,只要拿到文件流,其他的都很简单 impor...

Ark方舟 3219

在 Spring Boot 项目中实现文件下载功能

需求 在您的 springboot 项目中,可能会存在让用户下载文档的需求,比如让用户下载 readme 文档来更好地了解该项目的概况或使用方法。 所以,您需要为用户提供可以下载文件的 API ,将用户希望获取的文件作为下载资源返回给前端。 代码 maven 依赖 请您创建好一个 springboot 项目,一定要引入 web 依赖: <dependency> <grou...

Jake Weng 1万+

SpringBoot 文件的上传、下载

目录文件上传文件下载说明   文件上传 spring-boot-starter-web中已经包含了springmvc的依赖,其中包括上传文件所需的依赖,不需要额外添加依赖。   application.properties #所允许的文件最大尺寸,默认10MB spring.servlet.multipart.max-file-size=1024MB #所允许的请求最大尺寸,默认10MB spring.servlet.multipart.max-request-size=1024MB #

chy-x 的博客 1714
上一篇: springcloud中同时运行多个模块
爪挖
博客等级 码龄8年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值