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块后游戏结束,单局游戏无时间限…...
高压氢系统从里到外如何造?三层结构+双重密封详解
你或许时常于新闻之中听闻“氢能”、“新能源高压系统”这般的名词,然而针对其中最为关键的设备——以高压氢系统而言其内部的构造,大概依旧不太清楚。那什么是高压氢呢?它处于内部又是咋样组合的,并且依靠什么去保障安全呢&#…...
模型量化实战:从零实现PyTorch训练后量化(PTQ)全流程
1. 什么是训练后量化(PTQ)? 训练后量化(Post-Training Quantization,简称PTQ)是一种常见的模型压缩技术,它能在不重新训练模型的情况下,将浮点模型转换为低精度整型模型。简单来说&a…...
10本被低估的机器学习实战好书推荐
1. 机器学习经典书籍的隐藏宝藏作为一名在数据科学领域摸爬滚打多年的从业者,我深知机器学习的学习曲线有多陡峭。市面上充斥着大量热门教材,但真正能帮你突破瓶颈的,往往是那些被低估的佳作。今天要分享的这10本书,都是我书架上的…...
Moonlight TV终极指南:如何在大屏设备上免费串流PC游戏
Moonlight TV终极指南:如何在大屏设备上免费串流PC游戏 【免费下载链接】moonlight-tv Lightweight NVIDIA GameStream Client, for LG webOS TV and embedded devices like Raspberry Pi 项目地址: https://gitcode.com/gh_mirrors/mo/moonlight-tv 想在大屏…...
Java程序员AI时代自救指南|全阶段可落地学习路线手册(一)
(一)、Java程序员AI时代自救指南|全阶段可落地学习路线手册 前言:手册使用规则(必读) 核心宗旨:底层为根、生产为王、AI为翼、架构为上限 绝对准则:不学无用理论、全部绑定企业实战、每个模块闭环&#…...
Resource Override:3个核心问题,1个终极解决方案
Resource Override:3个核心问题,1个终极解决方案 【免费下载链接】ResourceOverride An extension to help you gain full control of any website by redirecting traffic, replacing, editing, or inserting new content. 项目地址: https://gitcode…...
Unity AudioSource播放控制全攻略:从Play到UnPause,新手也能搞定的UI交互实战
Unity音频交互实战:从零构建专业级音乐控制器 在游戏和多媒体应用开发中,音频控制是提升用户体验的关键环节。Unity的AudioSource组件提供了强大的音频处理能力,但如何将其与UI系统无缝结合,打造直观易用的音频控制器,…...
企业级视频上云实战:基于SRS5与GB28181构建安防监控流媒体中台
1. 为什么需要流媒体中台? 最近几年,我帮不少制造业客户搭建过视频监控上云方案,发现一个普遍痛点:企业内网往往部署了几十甚至上百个不同品牌的GB28181摄像头(比如海康、大华),这些设备分散在厂…...
别再死记硬背了!PADS Logic/Layout/Router 三大组件核心快捷键与无模命令实战指南
PADS三剑客高效操作手册:从快捷键到无模命令的进阶实战 在PCB设计领域,效率就是生命线。当项目周期压缩到以小时计算时,那些依赖鼠标在菜单栏里反复点击的操作方式,就像用打字机写代码一样令人抓狂。PADS作为业界主流工具链&#…...
Querybook数据文档管理:如何高效组织与分析数据资产
Querybook数据文档管理:如何高效组织与分析数据资产 【免费下载链接】querybook Querybook is a Big Data Querying UI, combining collocated table metadata and a simple notebook interface. 项目地址: https://gitcode.com/gh_mirrors/qu/querybook Que…...










