当前位置: 首页 > news >正文

Springboot_文件下载功能(前端后端)

遇到的问题:

  • 文件下载后文件一直被破坏,无法正常打开
  • 文件名乱码,如图
    在这里插入图片描述

刚开始一直在纠结,是不是后端没有写对,然后导致下载不能使用

后来搜索了一些资料,发现后端没什么问题

然后就开始找到其他项目对比下载功能

哈哈哈哈哈哈哈

不会也只能靠这个方法去找问题了,就是有点笨,但总归找到了问题所在

下载功能后端代码

    @GetMapping("/annex")public void downloadAnnex(ProcessFindReqVo processFindReqVo, HttpServletResponse response) throws IOException, HttpMediaTypeNotAcceptableException {String filePath = "文件路径"; // 指定文件路径if (StringUtils.isBlank(filePath)) {return;}File file = new File(filePath);if (!file.exists()) {return;}response.setCharacterEncoding("utf-8");response.setContentType("application/octet-stream;charset=UTF-8");String fileName = URLEncoder.encode(file.getName(), StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");response.addHeader("Content-Disposition", "attachment;filename=" + fileName);byte[] buffer = new byte[(int)file.length()];FileInputStream fis = null;OutputStream os = null;try {fis = new FileInputStream(file);os = response.getOutputStream();int i = -1;while ((i = fis.read(buffer)) != -1) {os.write(buffer, 0, i);}} catch (IOException ex) {ex.printStackTrace();} finally {if (os != null) {try {os.flush();os.close();} catch (IOException e) {e.printStackTrace();}}if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}

下载功能前端代码

export async function downloadAnnex(data){const res = await axios.get(`/scm/web/monthly/download/annex?id=`+data, {responseType: 'blob'})const content = res.dataconst blob = new Blob([content], { type: 'application/octet-stream' })const contentDispositionHeader = res.headers['content-disposition'];const fileName = contentDispositionHeader.split(';').map(item => item.trim()).find(item => item.startsWith('filename=')).substr('filename='.length);let decodeName = decodeURI(fileName);if ('download' in document.createElement('a')) { // 非IE下载const elink = document.createElement('a')elink.download = decodeNameelink.style.display = 'none'elink.href = URL.createObjectURL(blob)document.body.appendChild(elink)elink.click()URL.revokeObjectURL(elink.href) // 释放URL 对象document.body.removeChild(elink)} else { // IE10+下载navigator.msSaveBlob(blob, decodeName)}
}
  • 说回刚开始的问题,下载时文件始终提示被破坏的原因:
    export async function downloadAnnex(data){这里应该使用async关键字
    const res = await axios.get请求时也应该使用await关键字,这样就可以使文件顺利下载,至于为什么还没有深究。。。(想以后研究,不知道以后还能不能想起来了😅)
  • 文件名始终乱码,就使用decodeURI(fileName);进行解码,之后就可以正确的展示中文字符了,前提时后端传输时已经设置了UTF-8的编码

相关文章:

Springboot_文件下载功能(前端后端)

遇到的问题: 文件下载后文件一直被破坏,无法正常打开文件名乱码,如图 刚开始一直在纠结,是不是后端没有写对,然后导致下载不能使用 后来搜索了一些资料,发现后端没什么问题 然后就开始找到其他项目对比…...

Vue框架学习笔记——v-bind数据单向绑定和v-model数据双向绑定

文章目录 v-bind,数据单向绑定简写形态(省略v-bind,只留冒号)示例一(将输入框数据改为:哈哈哈哈哈):实例二(将Vue实例中的name改为字符串:"单向绑定&quo…...

将对象转成URL参数

背景 有的时候前端跳转到其他平台的页面需要携带额外的参数,需要将对象转成用 & 连接的字符串拼接在路径后面。 实现方法...

【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...

超级武器!深入LoadRunner性能测试流程及极速分析结果!

性能测试目的 1 什么是性能测试? 性能测试是通过性能的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。 负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能&#xff0…...

解决requests库进行爬虫ip请求时遇到的错误的方法

目录 一、超时错误 二、连接错误 三、拒绝服务错误 四、内容编码错误 五、HTTP错误 在利用requests库进行网络爬虫的IP请求时,我们可能会遇到各种错误,如超时、连接错误、拒绝服务等等。这些错误通常是由目标网站的限制、网络问题或我们的爬虫代码中…...

大语言模型领域的重要术语解释

前言 本人对人工智能非常感兴趣,目前是一名初学者,在研究大语言模型的一些内容。很多模型都是用英文提出的,其中也包括很多概念,有些概念的中文翻译和其想表达的意思不完全一样,所以在这里,想更加精准地帮…...

无需公网IP,使用内网穿透实现公网访问本地OpenWRT管理界面

文章目录 1.openWRT安装cpolar2.配置远程访问地址3.固定公网地址 简单几步实现在公网环境下远程访问openWRT web 管理界面,使用cpolar内网穿透创建安全隧道映射openWRT web 界面面板443端口,无需公网IP,无需设置路由器。 1.openWRT安装cpola…...

利用 docker 实现JMeter分布式压测

为什么需要分布式? 在工作中经常需要对一些关键接口做高QPS的压测,JMeter是由Java 语言开发,没创建一个线程(虚拟用户),JVM默认会为每个线程分配1M的堆栈内存空间。受限于单台试压机的配置很难实现太高的并…...

Sentinel 分布式系统

Sentinel 是一种分布式系统的流量防卫兵和熔断器,由阿里巴巴开发并开源。它的主要目标是保护分布式系统中的稳定性和可用性,防止因高并发或异常流量而导致的系统崩溃。下面是 Sentinel 的原理和使用教程的概要: Sentinel 的原理:…...

Cookie、Session、CBV加装饰器的三种方法

【0】cookie、session和Token的发展史 【1】Cookie的形式 存储形式:k:v键值对存储位置:客户端缺点:不安全,信息可能会泄露 【2】session的形式 标识符,表示我是当前用户加密出来的数据对敏感信息进行加密…...

【高级渗透篇】网络安全面试

【高级渗透篇】网络安全面试 1.权限维持2.代码安全Python语法相关 1.权限维持 Linux权限维持方法论 Windows权限维持方法论 2.代码安全 Python 语法相关 1、Python的值类型和引用类型是哪些 Python 中的值类型包括: 数字类型(如整数、浮点数、复数…...

【Flink】Process Function

目录 1、ProcessFunction解析 1.1 抽象方法.processElement() 1.2 非抽象方法.onTimer() 2、Flink中8个不同的处理函数 2.1 ProcessFunction 2.2 KeyedProcessFunction 2.3 ProcessWindowFunction 2.4 ProcessAllWindowFunction 2.5 CoProcessFunction 2.6 ProcessJo…...

【源码分析】zeebe actor模型源码解读

zeebe actor 模型🙋‍♂️ 如果有阅读过zeebe 源码的朋友一定能够经常看到actor.run() 之类的语法,那么这篇文章就围绕actor.run 方法,说说zeebe actor 的模型。 环境⛅ zeebe release-8.1.14 actor.run() 是怎么开始的🌈 Lon…...

python3实现类似expect shell的交互式与SFTP的脚本

前面写过一篇关于python实现类似expect shell的交互式能力的文章,现在补全一下加上sftp的能力脚本。 例子在代码中__example()方法。 依赖paramiko库,所以需要执行pip install paramiko来安装。 import os import queue import re import threading im…...

java游戏制作-飞翔的鸟游戏

一.准备工作 首先创建一个新的Java项目命名为“飞翔的鸟”,并在src中创建一个包命名为“com.qiku.bird",在这个包内分别创建4个类命名为“Bird”、“BirdGame”、“Column”、“Ground”,并向需要的图片素材导入到包内。 二.代码呈现 pa…...

NodeMCU ESP8266构建Web Server网页端控制设备

NodeMCU ESP8266构建Web Server网页端控制设备 前言 NodeMCU ESP8266 内部集成了TCP/IP协议栈,可以快速构建网络功能,搭建联网应用的硬件平台; ESP8266可以作为WiFi接入点(Station),这样可以方便连接互联…...

搭建区块链

参考B站FISCO BCOS(十八) java SDK与区块链交互_哔哩哔哩_bilibili 林中有神君 一、搭建第一个区块链网络 根据官方文档搭建:搭建第一个区块链网络 — FISCO BCOS v2.9.0 文档 (fisco-bcos-documentation.readthedocs.io) 使用javajdk 控制台2.6之后 本处是2.9.2…...

Python通过selenium调用IE11浏览器报错解决方法

前提 正常安装Python 工具,selenium 包可以正常导入。IE浏览器驱动 IEDriverServer.exe 已经正确放置到已经添加path目录的文件下。 报错现象: 解决方法 打开浏览器进入 internet 选项 切换到安全页签 ,去除“应用保护模式” 再次调用验证…...

Ubuntu 1.84.2Visual Studio Code 下载配置与vscode查看内存Hex Editor插件,简单易懂

目录 前言 一 首先我为啥要重装Vs Code呢? 二 下载1.84.2Visual Studio Code 三 配置Vscode终端字体 四 安装插件 前言 这是一篇将老版本的VsCode下载至最新版的博文,从下载到调试全篇 一 首先我为啥要重装Vs Code呢? 因为我想安装这个…...

文本数据净化与脱敏实战:构建安全高效的数据预处理流水线

1. 项目概述与核心价值最近在整理个人知识库和开源项目时,发现一个非常普遍但棘手的问题:如何安全、高效地处理来自不同渠道的文本数据,特别是那些可能包含用户隐私、敏感信息或格式混乱的内容。无论是从网页爬取的数据、用户提交的表单&…...

第15集:时序数据库选型实战!InfluxDB vs TDengine vs Prometheus 到底选谁

第15集:时序数据库选型实战!InfluxDB vs TDengine vs Prometheus 到底选谁 本集解锁内容:手把手安装三款主流时序库,用相同的运维指标数据跑分对比写入速度、查询性能、存储空间;给出面试中关于技术选型的万能回答模板。学完本集,你能在面对“为什么选这个库”的追问时,…...

3分钟快速上手:DownKyi B站视频下载器终极使用教程

3分钟快速上手:DownKyi B站视频下载器终极使用教程 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#xff…...

枚举(Enum)不只是常量:打造带有业务逻辑的强类型状态机

枚举(Enum)不只是常量:打造带有业务逻辑的强类型状态机在Java等编程语言中,枚举(Enum)通常被视为简单的常量集合,但实际上它们是功能强大的工具,可以构建带有业务逻辑的强类型状态机…...

OBS虚拟背景插件:3分钟打造专业直播间的完整指南

OBS虚拟背景插件:3分钟打造专业直播间的完整指南 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https://gitco…...

5个英雄联盟游戏痛点如何用智能助手League Akari高效解决:自动化操作实战指南

5个英雄联盟游戏痛点如何用智能助手League Akari高效解决:自动化操作实战指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在…...

告别信号衰减!PCIe 5.0硬件设计实战:从板材选择到玻纤效应的完整避坑指南

PCIe 5.0硬件设计实战:从板材选择到玻纤效应的完整避坑指南 当32GT/s的高速信号在PCB走线上疾驰时,每一个设计细节都可能成为性能的绊脚石。作为经历过三代PCIe标准迭代的硬件工程师,我至今记得第一次看到PCIe 5.0眼图崩溃时的震撼——那些理…...

免费获取VMware Workstation Pro 17许可证密钥:5步激活完整指南

免费获取VMware Workstation Pro 17许可证密钥:5步激活完整指南 【免费下载链接】VMware-Workstation-Pro-17-Licence-Keys Free VMware Workstation Pro 17 full license keys. Weve meticulously organized thousands of keys, catering to all major versions of…...

DoIP协议栈开发必踩的7大陷阱:从CAN迁移以太网的C++工程师速看

更多请点击: https://intelliparadigm.com 第一章:DoIP协议栈开发必踩的7大陷阱:从CAN迁移以太网的C工程师速看 当汽车电子工程师将传统CAN诊断逻辑迁移到DoIP(Diagnostics over Internet Protocol)时,看似…...

【独家内测数据】Copilot Next 启动耗时从2.8s压至0.41s:3步完成工作流自动化重构(附可复用JSON Schema模板)

更多请点击: https://intelliparadigm.com 第一章:Copilot Next 自动化工作流性能调优全景概览 Copilot Next 并非传统代码补全工具的简单升级,而是基于实时上下文感知、多模态意图理解与动态工作流编排能力构建的智能协同引擎。其性能表现…...