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

Springboot 下载附件

@GetMapping("/download")
public void download(@RequestParam String fileId, HttpServletResponse response) throws IOException {// 查询文件信息SysFileEntity sysFileEntity = fileService.queryFileById(fileId);response.setContentType("application/octet-stream");response.addHeader("Content-Length", "" + sysFileEntity.getSize());  // 文件大小response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(sysFileEntity .getFileName(), "UTF-8"));int bufferSize = 8 * 1024;File file = new File(sysFileEntity.getFilePath());# 指定 读、写缓冲区大小。不填时默认 缓冲区大小8192byteBufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file), bufferSize);BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream(), bufferSize);try {// 设置缓冲区byte[] bytes = new byte[bufferSize];int len;while ((len = bufferedInputStream.read(bytes, 0, bytes.length)) > 0){bufferedOutputStream.write(bytes, 0, len);}bufferedOutputStream.flush();}catch (Exception e){logger.error("下载附件出错", e);}finally {IoUtil.close(bufferedOutputStream);IoUtil.close(bufferedInputStream);}}

注意!!!!!!

response.setContentType("application/octet-stream");
response.addHeader("Content-Length", "" + sysFileEntity.getSize());  // 文件大小
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(sysFileEntity .getFileName(), "UTF-8"));

上述代码需写在response.getWriter或response.getOutputStream方法被调用之前。否则response.setContentType会不生效。

  1. 确保在调用response.setContentType方法之前,response.getWriter或response.getOutputStream方法没有被调用。因为一旦获取了响应的输出流或写入器,设置内容类型将不起作用。

  2. 确保在调用response.setContentType方法之前,没有向客户端发送任何数据。一旦开始向客户端发送数据,设置内容类型将不起作用。

相关文章:

Springboot 下载附件

GetMapping("/download") public void download(RequestParam String fileId, HttpServletResponse response) throws IOException {// 查询文件信息SysFileEntity sysFileEntity fileService.queryFileById(fileId);response.setContentType("application/oct…...

MySQL 延迟复制:确保数据安全与系统稳定的秘诀

MySQL 延迟复制:确保数据安全与系统稳定的秘诀 在 MySQL 主从复制架构中,数据的同步通常是实时的。然而,在一些特定场景下,我们可能不希望从库立刻同步主库的所有更新。特别是在高风险操作或者主库出现故障时,实时复制…...

ELK 使用教程采集系统日志 Elasticsearch、Logstash、Kibana

前言 你知道对于一个系统的上线考察,必备的几样东西是什么吗?其实这也是面试中考察求职者,是否真的做过系统开发和上线的必备问题。包括:服务治理(熔断/限流) (opens new window)、监控 (opens new window)和日志,如果…...

python实现自动登录12306抢票 -- selenium

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 python实现自动登录12306抢票 -- selenium 前言其实网上也出现了很多12306的代码,但是都不是最新的,我也是从网上找别人的帖子,看B站视频&…...

使用Diffusion Models进行图像超分辩重建

Diffusion Models专栏文章汇总:入门与实战 前言:图像超分辨率重建是一个经典CV任务,其实LR(低分辨率)和 HR(高分辨率)图像仅在高频细节上存在差异。通过添加适当的噪声,LR 图像将变得与其 HR 对应图像无法区分。这篇博客介绍一种方式巧妙利用这个规律使用Diffusion Mod…...

吾杯网络安全技能大赛——Misc方向WP

吾杯网络安全技能大赛——Misc方向WP Sign 题目介绍: 浅浅签个到吧 解题过程: 57754375707B64663335376434372D333163622D343261382D616130632D3634333036333464646634617D 直接使用赛博橱子秒了 flag为 WuCup{df357d47-31cb-42a8-aa0c-6430634ddf4a} 原神启动…...

Web安全 - “Referrer Policy“ Security 头值不安全

文章目录 概述原因分析风险说明Referrer-Policy 头配置选项1. 不安全的策略no-referrer-when-downgradeunsafe-url 2. 安全的策略no-referreroriginorigin-when-cross-originsame-originstrict-originstrict-origin-when-cross-origin 推荐配置Nginx 配置示例 在 Nginx 中配置 …...

C#OPC(上)

OPC(OLE for Process Control),用于过程控制的OLE,是一个工业标准,管理这个标准的国际组织是OPC基金会,OPC基金会现有会员以超过220家。遍布全球,包括世界上所有主要的自动化控制系统、仪器仪表及过程控制系统的公司。基于微软的O…...

Imgui + Cmake + OpenGL + GLFW 隐藏控制台窗口

网上一般是VS&#xff0c;如何在属性里面把控制台改为窗口 本文&#xff0c;使用Clion Cmake&#xff0c;实现如何隐藏控制台窗口 环境&#xff1a;OpenGL3 GLFW 添加头文件#include <windows.h>把main函数入口改为int WinMain(HINSTANCE hInstance, HINSTANCE hPrevI…...

Spring Boot(七):Swagger 接口文档

1. Swagger 简介 1.1 Swagger 是什么&#xff1f; Swagger 是一款 RESTful 风格的接口文档在线自动生成 功能测试功能软件。Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。目标是使客户端和文件系统作为服务器以同样的…...

RabbitMQ - 4 ( 22000 字 RabbitMQ 入门级教程 )

一&#xff1a; RabbitMQ 高级特性 前面主要讲解了 RabbitMQ 的概念和应用。RabbitMQ 实现了 AMQP 0-9-1 规范&#xff0c;并在此基础上进行了多项扩展。在 RabbitMQ 官方网站中详细介绍了其特性&#xff0c;我们将其中一些重要且常用的特性挑选出来进行讲解。 1.1 消息确认 …...

印象笔记07——试一试PDF标注

印象笔记07——试一试PDF标注 [!CAUTION] 根据第六期&#xff0c;我再次查询了资料&#xff0c;印象笔记还是有一些可圈可点的功能的&#xff08;当然部分有平替&#xff09;&#xff0c;针对会员作用&#xff0c;开发使用场景虽然是逆向的&#xff0c;但我坚信这是一部分人的现…...

Vue3实战教程》24:Vue3自定义指令

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 自定义指令​ 介绍​ 除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外&#xff0c;Vue 还允许你注册自定义的指令 (Custom Directives)。 我们已经介绍了两种在 Vue 中重用代码的方式&#xff1a;组件和组…...

【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向

【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向 【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向 文章目…...

【ArcGIS Pro/GeoScene Pro】可视化时态数据

可视化过去二十年新西兰国际旅游业的发展变化 工程数据下载 ArcGIS Pro 快速入门指南—ArcGIS Pro | 文档 添加数据 数据为中国旅客数据 转置表字段 列数据转行数据...

Linux buildroot和ubuntu的异同点

Buildroot 和 Ubuntu 都是 Linux 系统的操作环境,但它们的设计理念和使用场景有很大的不同。 一、定义与目标 Buildroot Buildroot 是一个用于生成嵌入式 Linux 系统的工具集,专注于交叉编译和构建嵌入式设备的最小 Linux 环境。它的目标是为嵌入式系统提供定制化和优化的…...

k8s系列--通过docker拉取的镜像导入到 containerd中

要将通过 docker pull 拉取的镜像导入到 containerd 中&#xff0c;可以按照以下步骤操作&#xff1a; 步骤 1&#xff1a;使用 docker 将镜像保存为 tar 文件 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.1 docker save registry.cn-ha…...

Spring Boot(快速上手)

Spring Boot 零、环境配置 1. 创建项目 2. 热部署 添加依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> </dependency&…...

note 41:账务系统开发规范

目录 系统设计 防重控制 流量控制 并发控制 异常处理 备份机制 系统开发​​​​​​​ 前端队列操作 外系统交互 ​​​​​​​​​​​​​​ 系统设计 防重控制 对于进入到系统中的数据&#xff08;文件导入、手工录入、系统直连等&#xff09;以及本系统发往外…...

基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真。具体参考文献&#xff1a; 考虑使用UAV作为中继辅助节点的设备到设备&#xff08;D2D&#xff09;无线信息和…...

类OpenClaw智能体优选指南,企业级+个人级全覆盖

2026年初&#xff0c;OpenClaw开源智能体框架凭借“自主规划、工具调用、端到端执行”的核心能力&#xff0c;打破传统AI“只对话不行动”的壁垒&#xff0c;在GitHub迅速斩获25万星标&#xff0c;引发全球科技圈热潮&#xff0c;国内厂商纷纷入局推出类OpenClaw产品&#xff0…...

基于Matlab的双向LSTM网络需求预测之旅

基于matlab的双向LSTM网络的需求预测&#xff0c;结果输出包括训练集结果、训练集误差&#xff0c;测试集结果、测试集误差。 数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。在当今数据驱动的时代&#xff0c;需求预测对于企业的决策制定起着至关重要的作用。…...

Win10自带应用太多?3分钟教你用PowerShell精准卸载(附常用应用命令大全)

Win10系统精简指南&#xff1a;PowerShell精准卸载内置应用全攻略 每次打开开始菜单&#xff0c;那些从未使用过的内置应用图标是否让您感到烦躁&#xff1f;作为技术从业者&#xff0c;我们更希望拥有一个干净高效的工作环境。本文将带您深入探索PowerShell在Windows系统管理中…...

Polars 2.0清洗稳定性生死线:当lazy.eval()遭遇OOM崩溃,这3个编译期优化参数必须重置!

第一章&#xff1a;Polars 2.0清洗稳定性生死线&#xff1a;当lazy.eval()遭遇OOM崩溃&#xff0c;这3个编译期优化参数必须重置&#xff01;在 Polars 2.0 中&#xff0c;lazy.eval() 的执行模型已深度耦合 Rust 编译期查询优化器&#xff08;QO&#xff09;&#xff0c;但默认…...

7个高级技巧深度掌握DS4Windows手柄映射引擎

7个高级技巧深度掌握DS4Windows手柄映射引擎 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows DS4Windows作为专业的游戏手柄映射解决方案&#xff0c;通过先进的XInput模拟技术将PlayStati…...

别再只调参了!深入DeepSORT的tracker.py:从轨迹管理到状态机,看懂跟踪器如何‘思考’

深入DeepSORT的tracker.py&#xff1a;从轨迹管理到状态机&#xff0c;看懂跟踪器如何‘思考’ 在目标跟踪领域&#xff0c;调试模型时遇到的ID频繁切换、轨迹断裂等问题往往令人头疼。许多开发者虽然能够跑通DeepSORT算法&#xff0c;但当需要针对特定场景优化时&#xff0c;却…...

Using Vulkan -- Pipeline Dynamic State

概述创建图形VkPipeline对象时&#xff0c;设置状态的逻辑流程如下&#xff1a;// 以视口状态为例 VkViewport viewport {0.0, 0.0, 32.0, 32.0, 0.0, 1.0};// 设置状态值 VkPipelineViewportStateCreateInfo viewportStateCreateInfo; viewportStateCreateInfo.pViewports &…...

别再死记公式!一个Buck电路实例带你吃透‘小信号建模’到底在干什么

从Buck电路实战理解小信号建模&#xff1a;为什么工程师需要这个"数学翻译器"&#xff1f; 第一次接触小信号建模时&#xff0c;我和大多数电力电子初学者一样困惑——明明电路已经能用状态方程描述&#xff0c;为什么还要大费周章地推导那些看似复杂的传递函数&…...

别再用subprocess了!Mojo原生FFI直连Python C API的5种安全模式,含CPython 3.11+PyPy兼容性矩阵表

第一章&#xff1a;Mojo 与 Python 混合编程案例 生产环境部署Mojo 作为新兴的系统级编程语言&#xff0c;原生兼容 Python 生态&#xff0c;支持在关键性能路径中无缝调用 Mojo 编译模块&#xff0c;同时复用 Python 的成熟工具链与部署基础设施。在生产环境中&#xff0c;典型…...

Git 批量拉取所有远程分支到本地(Git Bash + CMD 双版本)

在使用 Git 开发时&#xff0c;经常需要将远程所有分支一次性拉取到本地&#xff0c;避免手动逐个创建。下面分别给出 Git Bash 和 Windows CMD 下的一键批量拉取脚本。一、Git Bash 脚本&#xff08;适用于 Git Bash / Linux /macOS&#xff09;bash运行git fetch originfor b…...