2023.11.23 云服务器实现 Spring Boot 项目文件上传并访问
环境介绍
- 云服务器:京东云
- 云服务器系统: CentOS 7.9
- JDK 版本:1.8
- Spring Boot 版本:2.7.17
具体步骤
步骤一
- 首先我们得先创建一个 Spring Boot 项目
- 创建如下目录结构
关于如何创建一个 Spring Boot 项目 请点击下方链接详细了解
创建 Spring Boot 项目详细步骤
步骤二
- 使用 Xshell 操作你的云服务器
- 此时我们将在云服务器的 root 目录下 设置一个 upload 目录,用来保存上传的文件
步骤三
- 创建文件上传接口
- 在 Spring Boot 项目中,需要创建一个控制器(Controller)来处理文件上传的请求
- 此处可以使用 MultipartFile 对象来接收上传的文件
package com.example.demo.controller;import org.springframework.stereotype.Controller; import org.springframework.util.ClassUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile;import java.io.File; import java.io.IOException; import java.util.UUID;@Controller @ResponseBody @RequestMapping("/file") public class FileController {@RequestMapping("/only-file")public String upFile(@RequestPart("myfile")MultipartFile file) throws IOException { // 获取上传文件的原始文件名,并从中提取出文件的后缀名String fileName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); // 生产一个文件路径,该路径位于 /root/upload 目录下,并且文件名是一个随机的 UUID 加上文件的后缀名String filePath = "/root/upload" + "/" + UUID.randomUUID() + fileName;file.transferTo(new File(filePath));return filePath + "upload success!";} }
- 此处我们在 controller 文件夹中创建一个 FileController 类用来处理文件上传的请求
重点:
- 此处我们文件要存储的路径是以云服务器中 根目录 为基准来写的
- 我们第二步在云服务器中的 root 目录下创建了一个 upload 目录用来存放上传文件
- 所以此时的上传文件 理应存放在路径 "/root/upload" 目录下
步骤四
- 因为我们的Spring Boot 项目是作为一个独立的 jar 包运行的
- 所以我们需要在 Spring Boot 项目中进行一些配置,以便能够访问到存储在云服务器上的文件
- 因此我们需要在 Spring boot 项目中添加一个配置类,用于将文件存储路径映射为静态资源路径
package com.example.demo.configuration;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/uploads/**").addResourceLocations("file:" + "/root/upload/");} }
- 此处我们在 configuration 文件夹中创建一个 WebMvcConfig 类用来处理文件上传的请求
- 在这个配置类中,我们在 addResourceHandlers 方法中将我们存放上传文件的路径 映射为 " /uploads/** " 的静态资源路径
- 最后我们便可以通过在浏览器中输入 http://服务器公网IP:8080/uploads/filename 来访问上传的文件
步骤五
- 我们将写好的 Spring Boot 项目打包 并将打包好的 jar 包复制存储到云服务器 root 目录下
- 打包完成后 其所生成的 jar 包就在 target 目录下
- 在文件资源管理器中找到该 jar 包的位置
步骤六
- 我们直接在云服务器启动我们 Spring Boot 项目
- 使用 " java -jar (jar 包名)"
- 此处我们的 jar 包名为 demo-0.0.1-SNAPSHOT.jar
- 所以使用 java -jar demo-0.0.1-SNAPSHOT.jar 命令来启动 Spring boot 项目
步骤七
- 使用 Postman 构造上传文件的 form 表单请求
想要了解和使用 Postman 请点击下方链接
Postman 安装和使用
请翻阅至该链接的末尾
步骤八
- 在 Postman 下方查看 上传文件的新文件名
- 直接在浏览器输入对应的 URL 地址,来访问你上传的文件
相关文章:
2023.11.23 云服务器实现 Spring Boot 项目文件上传并访问
环境介绍 云服务器:京东云云服务器系统: CentOS 7.9JDK 版本:1.8Spring Boot 版本:2.7.17 具体步骤 步骤一 首先我们得先创建一个 Spring Boot 项目 创建如下目录结构 关于如何创建一个 Spring Boot 项目 请点击下方链接详细了解 …...
SAP实现多个统御科目:特殊总账SGL+备选统驭科目Alternative Reconciliation Accounts
以前只知道特别总账。学习了 客商的每个公司视图主数据唯一分配一个统驭科目。一般情况下,客商经常发生的业务对应的总帐科目设为统驭科目。 客户设置的统驭科目:应收账款 供应商设置的统驭科目:应付账款 除了经常的销售和采购业务对应应收和…...
【数据分享】2023年我国省市县三级的瞪羚企业数量(免费获取/Excel/Shp格式)
企业是经济活动的参与主体。一个城市的企业数量决定了这个城市的经济发展水平!比如一个城市的金融企业较多,那这个城市的金融产业肯定比较发达;一个城市的制造业企业较多,那这个城市的制造业肯定比较发达。 之前我们给大家分享了…...
用于计算机屏幕安全摄像头系统:Screen Anytime Crack
Screen Anytime 是一款软件,旨在自动将整个用户会话或 PC/服务器/VM/Kiosk 的 /RDP/Citrix/RemoteApp 会话的屏幕活动记录到视频日志文件中,以用于记录、审核和监控目的。通过重播其高度压缩的视频,您可以轻松回顾单台计算机或一组服务器/PC …...
Redis深入理解-Socket连接建立流程以及文件事件处理机制
Redis Server 运行原理图 Redis 服务器中 Socket 网络建立以及文件事件模型 一个 redis 单机,可以抗几百上千的并发,这里的并发指的就是同时可以有几百个 client 对这个 redis server 发起请求,都需要去建立网络连接,同时间可能会…...
Docker run 命令
docker run :创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS说明: -a stdin:指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR三项; -d:后台运行容器&am…...
Vue中的$nextTick的作用
在 Vue 中,当某些数据发生变化时,DOM 并不会立即更新。相反,Vue 会在下一个事件循环周期(microtask)中异步执行更新,这样可以避免频繁的 DOM 操作。然而,有时候我们需要在 DOM 更新后执行一些操…...
浅谈Linux bash脚本----getopts获取脚本POSIX标准传参
getopts是一个在 Shell 脚本中用于解析命令行选项的内置命令。 它用于处理脚本的参数,使得脚本可以接受不同的选项和参数,并根据用户提供的输入采取相应的操作。 getopts 命令基于 POSIX 标准,并且通常与 while 循环结合使用。它的语法如下…...
PyCharm玩转ESP32
想必玩ESP32的童鞋都知道Thonny,当然学Python的童鞋用的更多的可能是PyCharm和VsCode Thonny和PyCharm的对比 对于PyCharm和VsCode今天不做比较,今天重点说一下用PyCharm玩转ESP32,在这之前我们先对比下Thonny和PyCharm的优缺点 1、使用Tho…...
uniapp自定义导航栏返回按键
目录 htmljscss最后 html <!-- #ifdef MP-WEIXIN || APP-PLUS --> <view class"tc header":style"topBarHeight() 0 ? : height: topBarHeight() px;padding-top: topBarTop() px"><view class"reg180" :style"top…...
「可移动工具车」物料管理的得力助手
随着工业制造企业不断发展,仓储的运营变得越来越重要,物料高效管理也迎来了新的挑战,工厂物料管理直接影响着生产效率和成本控制,不合理的物料管理可能导致物料溢出、过度库存、损耗增加等问题,进而影响企业的整体竞争…...
授时小课堂——北斗卫星信号和GPS卫星信号谁更强?
北斗卫星信号好还是GPS信号更胜一筹呢?下面小编带大家一起来比较一下看看吧。 1. 系统覆盖范围 北斗卫星导航系统是中国自主研发的授时定位系统,其覆盖范围包括全球各个地区。但在海外地区,主要还是东南亚、南亚、中亚等地区,北斗…...
网站会遭受那些攻击,要怎么应对
随着互联网的普及和发展,很多企业或个人都建立了自己的网站,这些网站不仅可以展示企业或个人的信息,还可以提供各种服务和交流平台。但是,在运营网站的过程中,很多人都会遇到网站被流量攻击的情况,这种情况…...
后端-锁专题:synchronized(java对象结构、锁的类型、锁升级流程...)
文章目录 对象的结构以及大小内存换算java的常见数据类型以及所占字节数分析对象总共占多少字节,各项占多少字节对象头结构 锁类型锁升级流程 对象的结构以及大小内存换算 java的常见数据类型以及所占字节数 String:8字节 64位 int:4字节 …...
vscode在运行c语言时,无法scanf输入
问题: 在学习c语言中,我在使用scanf和cin时无法在终端进行输入(运行了但是无法输入),在网上寻找答案,并写下笔记 解决方法 选择左上角 文件->首选项(preferences)->设置(settings…...
ROLLUP 的几点说明(十七)
ROLLUP 最根本的作用是提高某些查询的查询效率(无论是通过聚合来减少数据量,还是修改列顺序以匹配前缀索引)。因此 ROLLUP 的含义已经超出了“上卷”的范围。这也是为什么在源代码中,将其命名为 Materialized Index(物…...
项目经理面试题持续更新
1.项目中常用的文档有哪些? 1、可行性报告 可行性报告的目的是调查和展示任务要求,并确定项目是否值得和可行。可行性由五个主要因素验证——技术和系统、成本、法律、运营和进度。次要可行性因素包括市场、资源和文化因素。 2、项目章程 项目章程是证明…...
基于JavaWeb+SSM+Vue校园水电费管理小程序系统的设计和实现
基于JavaWebSSMVue校园水电费管理小程序系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 摘 要 III Abstract 1 1 系统概述 2 1.1 概述 2 1.2课题意义 3 1.3 主要内容 3…...
主从复制读写分离?
主从复制和读写分离是常见的数据库架构策略,它们可以提高系统的性能和可靠性。下面是一个简单的实现方法: 主从复制: 配置主数据库:在主数据库上启用二进制日志(binary log),用于记录所有修改数…...
h5小游戏-盖楼游戏
盖楼游戏 一个基于JavaScrtipt、Html5 的盖楼游戏 效果预览 点我下载源代码 Game Rule 游戏规则 以下为默认游戏规则,也可参照下节自定义游戏参数 每局游戏生命值为3,掉落一块楼层生命值减1,掉落3块后游戏结束,单局游戏无时间限…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...










