1. 本地文件上传:为什么它依然是微服务架构中的“硬通货”?
在RuoYi-Cloud这类微服务项目中,文件上传功能看似基础,但配置起来却让不少开发者头疼。我见过很多团队,一提到文件存储,第一反应就是上云存储、上对象存储,觉得本地存储太“土”。但实际开发中,尤其是内部管理系统、快速原型验证、或者对成本敏感的项目,本地文件上传依然是最高效、最直接的选择。它不需要额外依赖第三方服务,没有网络延迟,调试起来也方便,对于中小型项目或者开发测试阶段,简直就是“神器”。
RuoYi-Cloud框架本身已经为我们封装好了文件服务模块(ruoyi-file),它支持本地存储、MinIO、FastDFS等多种方式。今天,我们就聚焦在最常用、最快速的本地文件上传上。我会带你从Nacos配置、后端路径映射,到前端el-upload组件集成,一步步打通这个流程。你会发现,在若依微服务里配好本地文件上传,后续切换到其他存储方式,也就是改个配置的事儿,核心代码几乎不用动。
简单来说,这个过程可以概括为三步:改配置(告诉系统文件存哪儿、怎么访问)、调后端(确保服务能正确接收和映射文件)、写前端(让用户能通过界面选择并上传文件)。听起来简单,但每个环节都有一些细节和“坑”需要留意,接下来我们就详细拆解。
2. 第一步:核心配置修改,让Nacos知道你的文件存哪
所有微服务的配置都集中在Nacos里,文件上传也不例外。我们需要修改的是 ruoyi-file 模块对应的配置文件,通常是 ruoyi-file-dev.yml(开发环境)。别担心,配置项非常直观。
2.1 定位与修改Nacos配置文件
首先,启动你的Nacos服务(通常访问 http://localhost:8848),在配置列表里找到 ruoyi-file-dev.yml 这个Data ID。点击编辑,找到关于本地文件存储的配置段。它大概长这样:
# 本地文件上传
file:
# 访问地址(这个很重要,是前端访问文件的根路径)
domain: http://127.0.0.1:9300
# 存储路径(文件实际保存在服务器的哪个目录)
path: D:/ruoyi/uploadPath
# 映射前缀(访问URL中会包含这个前缀)
prefix: /statics
我来解释一下这三个参数:
domain: 这是文件服务对外提供访问的地址。9300是ruoyi-file服务默认的端口。如果你改了端口或者通过网关转发,这里也要相应调整。例如,如果你的网关端口是8080,并且通过网关路由到文件服务,这里可以写成http://你的域名或IP:8080。path: 这是最关键的配置,决定了上传的文件物理上存放在你电脑的哪个文件夹。比如D:/ruoyi/uploadPath或/home/ruoyi/uploadPath(Linux)。请确保运行Java服务的用户对这个目录有读写权限,否则会上传失败。我建议在D盘或非系统盘专门建一个目录,避免权限问题。prefix: 这是一个虚拟路径。当用户访问http://127.0.0.1:9300/statics/2023/10/xxx.jpg时,Spring MVC会根据这个配置,把/statics/**这样的请求映射到上面path指定的真实物理路径去查找文件。
一个常见的坑:在Windows下,路径分隔符可以用 / 或 \\,但为了避免转义问题,我习惯用 /。在Linux下,直接用 / 即可。配置好后,记得在Nacos点击“发布”使配置生效。
2.2 理解路径映射原理:Spring MVC的魔法
光在Nacos里配好还不够,还需要在Spring Boot应用里告诉Web服务器:“嘿,如果有人来访问 /statics/ 开头的请求,别找我Controller,直接去那个硬盘文件夹里找文件。” 这个工作由 WebMvcConfigurer 完成。
在 ruoyi-file 模块中,通常有一个 ResourcesConfig 配置类。它的核心代码如下:
package com.ruoyi.file.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.io.File;
@Configuration
public class ResourcesConfig implements WebMvcConfigurer {
@Value("${file.path}")
private String localFilePath; // 对应Nacos里的 path: D:/ruoyi/uploadPath
@Value("${file.prefix}")
public String localFilePrefix; // 对应Nacos里的 prefix: /statics
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 关键配置:将 URL路径 映射到 本地文件系统路径
registry.addResourceHandler(localFilePrefix + "/**")
.addResourceLocations("file:" + localFilePath + File.separator);
}
}
</


1万+

被折叠的 条评论
为什么被折叠?



