SpringMVC文件下载
<!--解决找不到“jquery-3.4.1.min.js”(静态资源访问)的问题
-->
<mvc:default-servlet-handler/>
方式1:如果去掉download就是查看图片
<a href="${pageContext.request.contextPath}/uploadfiles/${requestScope.filename}" download>下载</a>
方式2:通过程序编码(下载对话框)的方式实现下载 如果要激活下载对话框,必须设置响应头: 将"Content-Disposition"的值设置为"attachment" 如果要将文件传输到客户端,需要将文件转化为字节流(byte[])放在响应中 因此,下载文件其实是要修改http响应 在SpringMVC框架中,可以使用ResponseEntity表示HTTP响应:状态码,响应头和响应内容。因此,我们可以使用它来配置HTTP响应实现文件的下载
页面可以这样
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<fieldset><legend>文件上传成功</legend>服务器名称:${requestScope.filename}<br>文件描述:${requestScope.description}<br><a href="${pageContext.request.contextPath}/uploadfiles/${requestScope.filename}">查看图片</a><a href="${pageContext.request.contextPath}/uploadfiles/${requestScope.filename}" download>下载图片</a><a href="${pageContext.request.contextPath}/download/${requestScope.filename}">点击下载</a>
</fieldset>
</body>
</html>
控制器代码
@RequestMapping("/download/{filename}")public ResponseEntity<byte[]> download(@PathVariable String filename, HttpServletRequest request)throws IOException {
// 获取要下载文件字节流ServletContext servletContext = request.getServletContext();InputStream in = servletContext.getResourceAsStream("uploadfiles/" + filename);
//设置响应内容:将文件转换为字节数组byte[] body = new byte[in.available()];in.read(body);
// 设置响应头,激活下载框HttpHeaders headers = new HttpHeaders();headers.add("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename,"utf-8"));
// 设置响应状态为200HttpStatus statusCode = HttpStatus.OK;
// 根据页面内容、页面头、页面状态创建并跳转到该页面(实际返回的是下载文件数据)ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);return response;}
相关文章:
SpringMVC文件下载
<!--解决找不到“jquery-3.4.1.min.js”(静态资源访问)的问题 --> <mvc:default-servlet-handler/>方式1:如果去掉download就是查看图片 <a href"${pageContext.request.contextPath}/uploadfiles/${requestScope.filena…...
前端项目打包放到springboot项目时,访问不带index.html
当您的前端项目被打包并放到 Spring Boot 项目中时,如果想要通过访问不带 index.html 的路径来直接进入前端页面,您可以使用以下方法: 1,在 Spring Boot 项目中添加一个路由规则,将所有对特定路径的请求重定向到前端页…...
Tomcat注册为服务后,如何配置Tomcat内存大小
前提条件:tomcat已经注册为服务。 1.winR,输入regedit打开注册表 2.找到Tomcat注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\Tomcat80603.找到jvm内存配置路径: HKEY_LOCAL_MACHINE\SOFTW…...
C语言入门实战教程——嵌入式必备教程(2023年版最全最新整理)
一、初识C语言 C语言诞生于美国的贝尔实验室,由丹尼斯里奇(Dennis MacAlistair Ritchie)以肯尼斯蓝汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,C语言是一个功能简化的版本,它使C…...
Chatbot开发三剑客:LLAMA、LangChain和Python
聊天机器人(Chatbot)开发是一项充满挑战的复杂任务,需要综合运用多种技术和工具。在这一领域中,LLAMA、LangChain和Python的联合形成了一个强大的组合,为Chatbot的设计和实现提供了卓越支持。 首先,LLAMA是…...
【Spring之AOP底层源码解析】
文章目录 一、动态代理1.1、ProxyFactory1.2、Advice的分类1.3、Advisor的理解 二、创建代理对象的方式2.1、ProxyFactoryBean2.2、BeanNameAutoProxyCreator2.3、DefaultAdvisorAutoProxyCreator 三、Spring AOP的理解3.1、AOP中的概念3.2、Advice在Spring AOP中对应API3.3、T…...
【UCAS自然语言处理作业二】训练FFN, RNN, Attention机制的语言模型,并计算测试集上的PPL
文章目录 前言前馈神经网络数据组织Dataset网络结构训练超参设置 RNN数据组织&Dataset网络结构训练超参设置 注意力网络数据组织&Dataset网络结构Attention部分完整模型 训练部分超参设置 结果与分析训练集Loss测试集PPL 前言 本次实验主要针对前馈神经网络࿰…...
RabbitMQ消息模型之Sample
Hello World Hello World是官网给出的第一个模型,使用的交换机类型是直连direct,也是默认的交换机类型。 在上图的模型中,有以下概念: P:生产者,也就是要发送消息的程序C:消费者:消…...
安全技术与防火墙
目录 安全技术 防火墙 按保护范围划分: 按实现方式划分: 按网络协议划分. 数据包 四表五链 规则链 默认包括5种规则链 规则表 默认包括4个规则表 四表 查询 格式: 规则 面试题 NFS常见故障解决方法 安全技术 入侵检测系统 (Intrusion Detection Sy…...
Windows系统搭建Appium 2 和 Appium Inspector 环境
前言 自 2022 年 1 月 1 日起,Appium 核心团队不再维护 Appium 1.x。官方支持的平台驱动程序的所有最新版本均不兼容 Appium 1.x,需要 Appium 2 才能运行。 Appium 2是一个自动化移动应用程序的开源工具,它带来了以下重要改进: …...
计算机应用基础_错题集_OutLook操作题_操作系统应用题_电子表格---网络教育统考工作笔记005
6、(说明:考生单击窗口下方的“打开[Outlook]应用程序”启动Outlook) 按以下要求保存草稿。 收件人:test_xiao_ming@163.com...
2023-11-26 LeetCode每日一题(统计子串中的唯一字符)
2023-11-26每日一题 一、题目编号 828. 统计子串中的唯一字符二、题目链接 点击跳转到题目位置 三、题目描述 我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数。 例如:s “LEETCODE” ,则其…...
HTML新手入门笔记整理:特殊符号
音标符 音标符 字符 Construct 输出结果 ̀、 a a à ́′ a a án ˆ a a â ̃~ a a ã ̀̀、 O O Ò ́́′ O O Ó ˆ O O Ô ̃~ O O Õ 字符 显示结果 描述 实体名称 实体编号 空格 <…...
物联网中基于信任的安全性调查研究:挑战与问题
A survey study on trust-based security in Internet of Things: Challenges and issues 文章目录 a b s t r a c t1. Introduction2. Related work3. IoT security from the one-stop dimension3.1. Output data related security3.1.1. Confidentiality3.1.2. Authenticity …...
tex2D使用学习
1. 背景: 项目中使用到了纹理进行插值的加速,因此记录一些自己在学习tex2D的一些过程 2. 代码: #include "cuda_runtime.h" #include "device_launch_parameters.h" #include <assert.h> #include <stdio.h>…...
[iOS开发]UITableView的性能优化
一些基础的优化 (一)CPU 1. 用轻量级对象 比如用不到事件处理的地方,可以考虑使用 CALayer 取代 UIView CALayer * imageLayer [CALayer layer]; imageLayer.bounds CGRectMake(0,0,200,100); imageLayer.position CGPointMake(200,200…...
使用opencv实现图像滤波
1 图像滤波介绍 滤波是信号和图像处理中的基本任务之一,其旨在有选择地提取图像的某些特征,可以用于在给定应用程序的上下文中传达重要信息,例如,去除图像中的噪声、提取所需的视觉特征、图像重采样等。 1.1 图像滤波理论 图像…...
Swagger在php和java项目中的应用
Swagger在php和java项目中的应用 Swagger简介Swagger在java项目中的应用步骤常用注解 Swagger在php项目中的应用 Swagger简介 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 总体目标是使客户端和文件系统作为服务器以…...
java科学计数法表示数值
Background 大多数计算器及计算机程序用科学记数法显示非常大和非常小的结果;但很多时候,我们需要做一个统一,要么全部以科学计数法输出,要么就全部显示为普通计数。注意:这里对大于等于1的数据做了特殊处理࿰…...
基于C#实现树状数组
有一种数据结构是神奇的,神秘的,它展现了位运算与数组结合的神奇魅力,太牛逼的,它就是树状数组,这种数据结构不是神人是发现不了的。 一、概序 假如我现在有个需求,就是要频繁的求数组的前 n 项和&#x…...
STM32MP1 M4核心定时器中断实战:从原理到1ms精准时基实现
1. 项目概述:深入STM32MP1的M4核心定时器世界在嵌入式开发中,定时器(Timer)堪称是系统的“心跳”和“节拍器”,其重要性不言而喻。对于STM32MP1这款集成了双核Cortex-A7和单核Cortex-M4的异构处理器,其M4核…...
圆桌探讨AI原生人才:从定义、来源到培养留存,为企业老板提供实战手册
嘉宾介绍真正AI原生的人或不来现场,对于积极转型的20%人群,有实战手册可用于找到、培养并留住他们。目前,仅1%的企业是AI原生企业,20%积极拥抱变化,80%在苦苦挣扎,人才情况也类似。一场圆桌深入探讨企业“赶…...
当IP矩阵遇上GEO,中小企业如何实现“双轮驱动”?
流量入口正在从搜索框向对话栏迁徙,你的品牌是“被看见”还是“被信任”?一、一个正在发生的营销范式革命2026年的一个真实场景:当潜在客户向豆包或千问提问“哪家公司的XX服务比较好”时,AI给出的推荐列表里,你的品牌…...
在Nodejs后端服务中集成Taotoken提供AI能力的配置指南
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Nodejs后端服务中集成Taotoken提供AI能力的配置指南 将大模型能力集成到后端服务是现代应用开发的常见需求。对于使用Node.js的开…...
DiskSpd深度解析:企业级存储性能调优的架构视角与实战指南
DiskSpd深度解析:企业级存储性能调优的架构视角与实战指南 【免费下载链接】diskspd DISKSPD is a storage load generator / performance test tool from the Windows/Windows Server and Cloud Server Infrastructure Engineering teams 项目地址: https://gitc…...
5步解锁Total War模组制作:用RPFM编辑器从新手到专家的完整指南
5步解锁Total War模组制作:用RPFM编辑器从新手到专家的完整指南 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: ht…...
Python之anonymous包语法、参数和实际应用案例
一、包概述与核心功能 graphs-edjedovi是一个极简Python库(当前版本0.0.2),仅封装Dijkstra单源最短路径算法,专注于带权有向/无向图的最短路径计算,无可视化、拓扑排序等扩展能力。 核心能力:计算单个源节点…...
LivePortrait技术突破:企业级肖像动画生成与部署实战指南
LivePortrait技术突破:企业级肖像动画生成与部署实战指南 【免费下载链接】LivePortrait Bring portraits to life! 项目地址: https://gitcode.com/GitHub_Trending/li/LivePortrait 从静态到动态:如何用AI技术让肖像"活"起来 在数字…...
【2026年华为暑期实习-非AI方向(通软嵌软测试算法数据科学)- 5月22日-第二题- 建筑物的安全视野】(题目+思路+JavaC++Python解析+在线测试)
题目内容 在城市规划中,建筑师需要分析建筑物之间的视野关系。给出一条街道上的一排建筑物,每个建筑物有一定的高度。对于每个建筑物,我们定义一个安全视野距离:从该建筑物向右看,能看到的建筑物的数量。 一个建筑物 AAA 能够看到另一个建筑物 BBB 的条件是: BB...
Dark Reader动态主题修复终极指南:自动化解决网站适配难题
Dark Reader动态主题修复终极指南:自动化解决网站适配难题 【免费下载链接】darkreader Dark Reader Chrome and Firefox extension 项目地址: https://gitcode.com/gh_mirrors/da/darkreader Dark Reader是一款广受欢迎的浏览器扩展,能帮助你将任…...
