springboot实现文件上传功能,整合云服务


文章目录

  • 这是springboot案例的,文件上传功能的拆分,本篇将带大家彻底了解文件上传功能,先从本地存储再到云存储,全网最详细版本,保证可以学会,可以了解文件上传功能的开发
  • 文件上传功能剖析
  • 进行书写一个小的文件上传
  • 文件上传的文件三要素
    • 首先表单提交的方式要是 post方式,
    • 第二个enctype="multipart/form-data 这个要求
    • 第三个是在提交文件的type要选择 type="file"的方式
  • 云存储 ,进行云存储保存改造


这是springboot案例的,文件上传功能的拆分,本篇将带大家彻底了解文件上传功能,先从本地存储再到云存储,全网最详细版本,保证可以学会,可以了解文件上传功能的开发

文件上传功能剖析

首先分析业务场景,文件上传功能场景,一般是修改员工信息,或者新增用户要上传的文件信息,

在这里插入图片描述
这里文件上传

这是场景分析

进行书写一个小的文件上传

先写一个html文件

在springboot项目中,在resource中,书写一个html页面

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head><meta charset="UTF-8"><title>文件上传</title>
</head>
<body>
<!--enctype="multipart/form-data"-->
<form method="post" enctype="multipart/form-data" action="/upload">姓名:<input type="text" name="username"><br>年龄:<input type="text" name="age"><br>文件:<input type="file" name="image"><br><input type="submit" value="提 交"></form></body>
</html>

这是一个表单页面代码,下面要介绍一下文件上传的前端三要素

文件上传的文件三要素

首先表单提交的方式要是 post方式,

第二个enctype="multipart/form-data 这个要求

第三个是在提交文件的type要选择 type="file"的方式

在这里插入图片描述

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head><meta charset="UTF-8"><title>文件上传</title>
</head>
<body>
<!--enctype="multipart/form-data"-->
<form method="post" enctype="multipart/form-data" action="/upload">姓名:<input type="text" name="username"><br>年龄:<input type="text" name="age"><br>文件:<input type="file" name="image"><br><input type="submit" value="提 交"></form></body>
</html>

这个是前端文件的全部代码,可以直接使用

在这里插入图片描述前端

那么书写完前端后,就可以书写后端

package com.healer.controller;import com.healer.common.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.util.UUID;/*** @author healer* @Description UploadController* @data 2024-06-01 9:35*/@RestController
@Slf4j
public class UploadController {@PostMapping("/upload")public Result uploadFile(String username, Integer age, MultipartFile image) throws IOException {log.info("文件上传.....{} {}", username, age);//        首先获取源文件String originalFilename = image.getOriginalFilename();//        使用UUID生成新文件名String uuid = UUID.randomUUID().toString();//        截取String substring = originalFilename.substring(originalFilename.lastIndexOf("."));String newFile = uuid + substring;image.transferTo(new File("D:\\images\\" + newFile));return Result.success();}
}

这个是后端的代码

在上传文件的时候会需要进行,文件名防止重复
所以这里使用UUID去生成前面的文件名
然后再获取文件名的拓展名
然后使用uuid生成的id 与拓展名进行拼接
那么就获取新的文件名
上传文件

在这里插入图片描述
在这里插入图片描述
然后就文件上传成功了

本地存储完成

没有什么业务逻辑

直接在controller层接收数据 然后保存就可以了

云存储 ,进行云存储保存改造

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

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

相关文章

Leetcode 剑指 Offer II 080.组合

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定两个整数 n 和 k&#xff0c;返回 1 … n 中所有可能的 k 个…

vue2+antv/x6实现er图

效果图 安装依赖 npm install antv/x6 --save 我目前的项目安装的版本是antv/x6 2.18.1 人狠话不多&#xff0c;直接上代码 <template><div class"er-graph-container"><!-- 画布容器 --><div ref"graphContainerRef" id"gr…

houdini编程语言:深入探索其复杂性与独特性

houdini编程语言&#xff1a;深入探索其复杂性与独特性 Houdini编程语言&#xff0c;作为一个富有创意和挑战性的领域&#xff0c;吸引了无数编程爱好者的目光。其独特的设计理念和复杂的语法结构&#xff0c;使得它成为了一个极具困惑度和爆发度的编程语言。本文将从四个方面…

国际荐酒师(香港)协会受邀出席广州意大利国庆晚宴

2024年5月30日&#xff0c;意大利驻广州总领事馆举办的2024年意大利国庆招待会及晚宴&#xff0c;庆祝意大利共和国成立。此次晚宴旨在促进中意两国之间的文化交流与合作。国际荐酒师&#xff08;香港&#xff09;协会受主办方邀请参与了这一重要活动。 国际荐酒师&#xff08;…

内核调度客制化利器:SCHED_EXT

一、前言 今年年初&#xff0c;宋宝华老师发表了一篇对2023年内核技术总结的文章《熠熠生辉 | 2023 年 Linux 内核十大技术革新功能》。有兴趣的伙伴可以点击蓝色字体链接回顾。 文章提及的10个技术中&#xff0c;与CPU任务调度器核心相关的内容&#xff0c;一共有两个&#xf…

Spring IoC 的实现机制

案例一&#xff1a; Spring 中的 IoC 的实现原理就是工厂模式加反射机制。我们先使用一个简单的案例理解一下&#xff1a; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException;// 定义一个水果接口&#xff0c;包含吃的方法 public i…

Vue 3.4.5深度解析:从基础到高级,掌握Composition API与全局API精髓

一、基础函数&特性 1. setup() 函数 作用&#xff1a;setup() 是Vue 3引入的一个新的组件选项&#xff0c;用于定义组件的逻辑。它在组件初始化阶段被调用&#xff0c;替代了Vue 2中的data、methods等选项。特点&#xff1a; 接收props和context作为参数。返回的对象将被…

Spring:jackson-annotaions注解大全

文章目录 一、介绍二、JsonProperty三、JsonIgnore四、JsonInclude五、JsonFormat六、JsonCreator 和 JsonProperty (在构造函数中)七、JsonTypeName 和 JsonTypeInfo八、JsonIgnoreProperties九、JsonSerialize十、JsonDeserialize 一、介绍 jackson-annotations 是 Jackson …

痛心!2岁女童被从17楼推下坠亡,凶手疑是未成年

一起又一起的案件&#xff0c; 如同一部沉重的史诗&#xff0c; 无声地述说着一个共同的真理&#xff1a; 严惩恶魔&#xff0c;实则是在庇护着无数纯真的心灵&#xff0c;守护着更多的孩子。 因为每一起案件的背后&#xff0c;都隐藏着一个个令人心碎的故事。 01 近日&#xf…

错误发生在尝试创建一个基于有限元方法的功能空间时

问题&#xff1a; index cell.index(#直接使用从0开始的索引if0<1ndex<10: #正集流体 subdomains_x[cell,index(] 1 fem1 /usr/bin/python3.8 /home/wy/PycharmProjects/pythonProject2/fem1.pyUnknown ufl object type FiniteElementTraceback (aost recent call last)…

python编程:实现对数据库中图片文件的查看及比对

当谈到图像查看和管理时,我们往往会使用一些工具软件,比如Windows自带的照片查看器或者第三方工具。那如果你想要一个更加强大和定制化的图像查看器呢?这时候就需要自己动手写一个程序了。 C:\pythoncode\new\ShowSqliteImage.py 这里我们将介绍一个使用Python和wxPython编写…

解析Java中1000个常用类:Iterable类,你学会了吗?

在 Java 编程中,集合(Collections)是非常重要的数据结构。无论是数组、列表、集合,还是其他形式的集合,如何高效地遍历这些集合都是一个关键问题。 Java 提供了一个基础接口 Iterable,它为集合类的遍历提供了统一的接口。 本文将深入探讨 Iterable 接口,介绍其用法、实…

FPGA-ARM架构与分类

ARM架构&#xff0c;曾称进阶精简指令集机器&#xff08;Advanced RISC Machine&#xff09;更早称作Acorn RISC Machine&#xff0c;是一个32位精简指令集&#xff08;RISC&#xff09;处理器架构。 主要是根据FPGA zynq-7000的芯片编写的知识思维导图总结,废话不多说自取吧 …

【Python内功心法】:深挖内置函数,释放语言潜能

文章目录 &#x1f680;一、常见内置函数&#x1f308;二、高级内置函数⭐1. enumerate函数&#x1f44a;2. eval函数❤️3. exec函数&#x1f4a5;4. eval与exec 中 globals与locals如何用☔4-1 globals 参数&#x1f3ac;4-2 locals 参数 ❤️5. filter函数&#x1f44a;6. z…

Python 之SQLAlchemy使用详细说明

目录 1、SQLAlchemy 1.1、ORM概述 1.2、SQLAlchemy概述 1.3、SQLAlchemy的组成部分 1.4、SQLAlchemy的使用 1.4.1、安装 1.4.2、创建数据库连接 1.4.3、执行原生SQL语句 1.4.4、映射已存在的表 1.4.5、创建表 1.4.5.1、创建表的两种方式 1、使用 Table 类直接创建表…

16岁适合做什么编程题:探索编程世界的入门之旅

16岁适合做什么编程题&#xff1a;探索编程世界的入门之旅 在数字化浪潮席卷而来的今天&#xff0c;编程已成为一项重要的技能。对于16岁的青少年来说&#xff0c;学习编程不仅可以锻炼逻辑思维&#xff0c;还能为未来的职业发展打下坚实的基础。那么&#xff0c;16岁适合做什…

安卓如何书写注册和登录界面

一、如何跳转一个活动 左边的是本活动名称&#xff0c; 右边的是跳转界面活动名称 Intent intent new Intent(LoginActivity.this, RegisterActivity.class); startActivity(intent); finish(); 二、如果在不同的界面传递参数 //发送消息 SharedPreferences sharedPreferen…

【学习Day4】计算机基础

✍&#x1f3fb;记录学习过程中的输出&#xff0c;坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;指点&#x1f64f; ❤️学习和复习的过程是愉快嘚。 1.7.3 流水线 流水线&#xff08;pipeline&#xff09;技术…

单片机按键处理模块

一 介绍 1.key_board用于单片机中的小巧多功能按键支持&#xff0c;软件采用了分层的思想&#xff0c;并且做到了与平台无关&#xff0c;用户只需要提供按键的基本信息和读写io电平的函数即可&#xff0c;非常方便移植&#xff0c;同时支持多个矩阵键盘及多个单io控制键盘。 …

Python 字符串的运算

在 Python 中&#xff0c;字符串支持一系列的运算操作&#xff0c;包括字符串拼接、重复、比较和成员检测等。以下是一些常见的字符串运算&#xff1a; 字符串拼接&#xff1a;使用加号 可以将两个字符串连接起来。例如&#xff0c;"Hello, " "World" 将…