SpringBoot文件上传(官方案例)

news2025/7/9 20:52:23
  1. 在线文档
  2. 项目结构
    1.源码克隆:git clone https://github.com/spring-guides/gs-uploading-files.git
    2.包含两个项目initial和complete,initial可以根据文档练习完善,complete是完整项目
    3.功能描述:构建接受文件上传的应用程序,并且通过简单的 HTML 界面来测试文件上传下载

  3. 源码分析

    1.POM依赖
    <dependencies>
    	<!--https://blog.csdn.net/tongxin_tongmeng/article/details/128396471-->
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-thymeleaf</artifactId>
    	</dependency>
    	<!--https://blog.csdn.net/tongxin_tongmeng/article/details/128397075-->
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-web</artifactId>
    	</dependency>
    	<!--https://blog.csdn.net/tongxin_tongmeng/article/details/128399703-->
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-test</artifactId>
    		<scope>test</scope>
    	</dependency>
    </dependencies>
    2.入口类
    // https://blog.csdn.net/tongxin_tongmeng/article/details/128401278
    @SpringBootApplication
    // https://blog.csdn.net/tongxin_tongmeng/article/details/128401815
    @EnableConfigurationProperties(StorageProperties.class)
    public class UploadingFilesApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(UploadingFilesApplication.class, args);
    	}
    
        // https://blog.csdn.net/tongxin_tongmeng/article/details/128402169
    	@Bean
    	CommandLineRunner init(StorageService storageService) {
    		return (args) -> {
    			storageService.deleteAll();
    			storageService.init();
    		};
    	}
    }
    3.控制器
    @Controller
    public class FileUploadController {
    
    	private final StorageService storageService;
    
    	// https://blog.csdn.net/tongxin_tongmeng/article/details/128402579
    	@Autowired
    	public FileUploadController(StorageService storageService) {
    		this.storageService = storageService;
    	}
    
    	// https://blog.csdn.net/tongxin_tongmeng/article/details/128405403
    	@GetMapping("/")
    	public String listUploadedFiles(Model model) throws IOException {
    
    		model.addAttribute("files", storageService.loadAll().map(
    				path -> MvcUriComponentsBuilder.fromMethodName(FileUploadController.class,
    						"serveFile", path.getFileName().toString()).build().toUri().toString())
    				.collect(Collectors.toList()));
    
    		return "uploadForm";
    	}
    
    	@GetMapping("/files/{filename:.+}")
    	// https://blog.csdn.net/tongxin_tongmeng/article/details/128406009
    	@ResponseBody
    	public ResponseEntity<Resource> serveFile(@PathVariable String filename) {
    
    		Resource file = storageService.loadAsResource(filename);
    		return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION,
    				"attachment; filename=\"" + file.getFilename() + "\"").body(file);
    	}
    
    	@PostMapping("/")
    	public String handleFileUpload(@RequestParam("file") MultipartFile file,
    			RedirectAttributes redirectAttributes) {
    
    		storageService.store(file);
    		// https://blog.csdn.net/tongxin_tongmeng/article/details/128406963
    		redirectAttributes.addFlashAttribute("message",
    				"You successfully uploaded " + file.getOriginalFilename() + "!");
    
    		return "redirect:/";
    	}
    
    	// https://blog.csdn.net/tongxin_tongmeng/article/details/128406477
    	@ExceptionHandler(StorageFileNotFoundException.class)
    	public ResponseEntity<?> handleStorageFileNotFound(StorageFileNotFoundException exc) {
    		return ResponseEntity.notFound().build();
    	}
    
    }
  4. 项目演示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108954.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

转行人必看:数字IC前端设计学习路线与方法(内附学习视频)

众所周知&#xff0c;数字前端设计对于工程师的能力要求比较高&#xff0c;不仅有学历上的要求&#xff0c;还要求掌握很多的知识技能。不少跨专业想要转行的小伙伴对数字前端设计这个岗位不是很了解&#xff0c;下面IC修真院就带大家全面了解一下数字IC前端设计。 数字前端到…

酒水销售网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网站前台&#xff1a;网站介绍、帮助信息、酒水资讯、酒水类型、酒水信息、购物分享 管理员&#xff1a; 1、管理网站介…

matlab源码说明

目录 1.MATLAB概述 2.MATLAB程序使用几个常规注意实现 2.1.运行过程可能出现Out of Memory的问题解决办法 2.2.保存大于2G的数据 2.3.程序运行方法 1.MATLAB概述 Matlab经过不断的发展和完善,如今已成为覆盖多个学科,是具有超强数值计算能力和仿真分析能力的软件。…

YOLOv5s.yaml文件解读

目录一、YOLOv5s.yaml内容二、详解2.1参数配置2.2 anchors2.3 backbone2.4 head三、如何调整模型一、YOLOv5s.yaml内容 YOLOv5配置了4种不同大小的网络模型&#xff0c;分别是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff0c;其中YOLOv5s是网络深度和宽度最小但检测速度最快的…

资深车主才会告诉你的那些事,看完立省三万二

自动驾驶已经火了几年了。在某度一搜“自动驾驶”&#xff0c;全都是某某公司推出了自动驾驶&#xff0c;某某公司打算推出自动驾驶。当然&#xff0c;这两年因为各种事故的原因&#xff0c;“自动驾驶”被各种名词取代——辅助驾驶、高级辅助驾驶、领航辅助驾驶......这就有点…

以英雄之名为S9总决赛助攻! 虎牙直播and华为云CDN,team work才会赢

以英雄之名为S9总决赛助攻! 虎牙直播and华为云CDN&#xff0c;team work才会赢 你的朋友圈肯定经历过这样一波刷屏 啊啊!!!赢了祝贺!#FPX团灭G2#FPX夺冠啦!超帅超酷超级棒!我们是冠军!!!恭喜FPX!凤凰涅槃!FPX咋这么稳!实在太稳了!小凤凰一飞冲天 团灭!就两个字 就是感觉很厉害…

SimpleAdapter的简单使用

SimpleAdapter适配器的简单使用 1.SimpleAdapter 1.简介 显示复杂的列表项&#xff0c;如图片2.SimpleAdapter的构造函数 上下文数据&#xff08;保存map的list集合&#xff09;子布局key子布局中的id注意&#xff1a;key和id是一一对应的关系 3.SimpleAdapter案例-用户简介 3.…

Java面试常用,初级到高级(持续更新中....)

文章目录一、java基础1、基本类型2、String相关3、数组和list相互转换4、java中的锁5、常用的算法二、项目层面1、并发与并行的区别三、常见错误解决1、Java ConcurrentModificationException异常原因和解决方法2、 main中不能使用this四、底层的相关技术1、spring如何处理循环…

54.Python的def语句自定义函数

54.def语句自定义函数 文章目录54.def语句自定义函数1.课题导入—数学中的函数1.1 计算圆的面积1.2 计算不规则图形的面积2. 什么是函数3. 函数分类3.1 内置函数3.2 自定义函数4. 计算多个矩形的面积5. 自定义函数计算矩形的面积6.自定义函数的写法1.先写函数要实现的功能2.添加…

Android设计模式详解之策略模式

前言 定义&#xff1a;定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 使用场景&#xff1a; 针对同一类型问题的多种处理方式&#xff0c;仅仅是具体行为有差别时&#xff1b;…

电磁波的达朗贝尔方程 工程电磁场P25

我们有下述两个方程 记住一定是线性介质 称为电磁波的达朗贝尔方程&#xff0c;是两个非齐次方程 我们下面介绍达朗贝尔方程的解 我们就用最简单的场源举例 这个方程可以写成 动态位是r和时间的函数 我们可以在球坐标系下展开成 我们再做一下变换 现在如果在这个微分方程里面…

智牛股_第7章_OAuth2+Spring Security OAuth2+GateWay+Druid+Spring Data JPA

交易平台 - Day 7 文章目录交易平台 - Day 7学习目标第1章 OAUTH2统一认证1. 目标2. 分析3. 讲解3.1 传统登陆认证3.2 单点登陆认证3.3 OAuth2简介3.4 OAuth2角色3.5 OAuth2 协议流程3.6 授权类型3.7 授权码模式流程3.8 简化模式3.9 密码模式3.10 客户端模式3.11 Spring Securi…

分治法算法

目录 一 算法简介 ①算法定义 ②算法特征 ③算法编程 二 算法应用 汉诺塔 问题描述 问题解析 问答解答 快速幂 问题描述 问题解析 问题解答 三 分治思想设计排序算法 步骤解析 归并排序 归并排序的主要操作 归并排序与交换排序 归并算法的应用&#xff1a;逆…

前端基础(十六)_BFC、box-shadow(盒子阴影)、text-shadow(文字阴影)

什么是BFC&#xff1f; 1、块级格式化上下文&#xff0c;web页面可视化css视觉渲染的一部分&#xff0c;是页面中一个独立的渲染区域&#xff1b; 2、用于决定块盒子的布局和浮动相互影响范围的一个区域&#xff0c;可以改变父级元素的渲染规则&#xff1b; 3、无论里面怎么折…

轻松入门基因表达式编程 (GEP)

0 引言 基因表达式编程 GEP (Gene Expression Programming) 是一种基于生物基因结构和功能发明的一种新型自适应演化算法。GEP 是从遗传算法&#xff08;geneticalgorithms ,简称 GAs&#xff09;和遗传程序设计&#xff08;genetic pro2gramming ,简称 GP&#xff09;中发展而…

Android GB∕T 19056-2021 汽车行驶记录仪-定位性能测试

最近在做汽车相关的项目&#xff0c;然后要根据最新发布的新国标接入&#xff0c;我们这边之前没有做过的&#xff0c;我是第一个&#xff0c;好惨啊。远程调试不通&#xff0c;后来还专门到现场进行了测试&#xff0c;来到刚刚转正没几天就开始出差了&#xff0c;命太苦了。 …

前沿系列--Transform架构[架构分析+代码实现]

文章目录前言总体架构总体任务使用输入部分EmbeddingPosition Encodingwhy实现注意部分注意力机制/自注意力掩码作用如何工作形状解释完整实现多头注意力实现Norm处理FeedForward 以及连接编码器解码器中间层组装输出层模型组装总结前言 Transform这玩意的大名我想就不用我多说…

2022年笔记本电脑市场总结:华为份额激增95%,联想、苹果均下滑

2022年即将过去&#xff0c;又来到了进行今年笔记本市场总结的环节。 今年笔记本电脑行业依然没有突破天花板。可以看到&#xff0c;2022年上半年期间市场还保持着良好的增长态势&#xff0c;到了下半年则出现了需求萎靡的状态。从一整年的数据来看&#xff0c;笔记本电脑行业还…

安装nnpy出现错误以及解决

今天在安装P4C的时候&#xff0c;参考了这篇博客 P4语言环境安装-前端编译器p4c、后端编译器p4c-bm2-ss、交换模型bmv2、Tutorial-张华Guido 在进行到这一步时&#xff0c;出现了错误 #安装python-pip sudo apt install python-pip #我是安装在/home/guido(user_name)/路径下…

阿里云斩获2022全球分布式云大会两项大奖

12 月 21日&#xff0c;“2022 全球分布式云大会深圳站”正式举办。阿里云弹性计算团队凭借在算力领域的创新突破与全面的分布式云产品矩阵布局&#xff0c;荣获“2022 年度中国算力先锋 TOP3”、“2022 年度分布式算力市场领导力企业”两项大奖。 图一&#xff1a;2022年度中国…