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 对象来接收上传的文件
java 复制代码
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 项目中添加一个配置类,用于将文件存储路径映射为静态资源路径
java 复制代码
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 {

    @Override
    public 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 地址,来访问你上传的文件
相关推荐
a5986521 小时前
云手机怎么选?ARM服务器原生架构和X86模拟器差别很大
服务器·arm开发·智能手机
程序员清风9 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
打工仔折腾 AI11 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
yyuuuzz11 小时前
跨境站点日志时区混乱的排查记录
运维·服务器·网络·云计算·aws·1024程序员节
‎ദ്ദിᵔ.˛.ᵔ₎11 小时前
关于Linux 线程局部存储的认识
linux·运维
GlobalInfo11 小时前
全球及中国风电叶片检测机器人行业研究报告(2026版):市场现状、行业前景与占有率分析
运维·网络·人工智能·机器人
数字新视界13 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
隔窗听雨眠13 小时前
KingbaseES平替全链路实践:从迁移评估到可持续运维
运维
skywalk816313 小时前
登到192.168.1.5那台机器,看看今天白天,大约从早晨到晚上,都卡住了。看看因为什么卡住,为什么卡住而没有杀死那个导致卡死的进程,为什么
运维·系统·freebsd
运维行者_13 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php