当前位置: 首页 > article >正文

RuoYi是如何实现图片的服务器上传和地址回显

图片上传

现在想要去上传一张照片,首先前端调用上传接口

/**
 * xx图片上传
 */
@PostMapping("/avatar")
public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException
{
    if (!file.isEmpty()){
        // ...
        String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file);
        if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
        {
            AjaxResult ajax = AjaxResult.success();
            ajax.put("imgUrl", avatar);
            // ...
            return ajax;
        }
    }
    return AjaxResult.error("上传图片异常,请联系管理员");
}

保存到数据库,并返回给前端

{
	code: 200
	imgUrl: "/profile/avatar/2021/06/17/6bbf9ba0-5341-4bc1-8af2-0943ec9aa530.jpeg"
	msg: "操作成功"
}

web前端将其拼接,就可以访问到服务器上的本地文件
http://localhost/dev-api/profile/avatar/2021/06/17/xxx.jpeg

图片路径

前端

可以看到图片路径有点陌生,这里使用到了代理;路径首先被web前端解析

-- 前端配置
process.env.VUE_APP_BASE_API = 'http://localhost/dev-api'

-- 使用代理来解决跨域问题
http://localhost/dev-api -> http://localhost:8080

-- 解析前端请求 /dev-api
http://localhost/dev-api/profile/avatar/2021/06/17/xxx.jpeg
-- 此时,再将请求交给后端处理
http://localhost:8080/profile/avatar/2021/06/17/xxx.jpeg		
后端

后端对匹配的URL进行拦截 /profile/** ,映射至本地文件夹 RuoYiConfig.getProfile()

/**
 * 通用配置
 * 
 * @author ruoyi
 */
@Configuration
public class ResourcesConfig implements WebMvcConfigurer
{
	/** 配置静态资源映射 */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry)
    {
        /** 本地文件上传路径 */
        registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + RuoYiConfig.getProfile() + "/");
		// ...
    }
    // ...
}

相关常量

# 资源映射路径 前缀
Constants.RESOURCE_PREFIX = "/profile"

# RuoYiConfig.getProfile() 获取项目信息 ruoyi.profile
D:/ruoyi/uploadPath

这样图片数据便被从本地拿到,经历了 前端 -> 后端 -> 本地文件 的过程!


http://www.kler.cn/a/320145.html

相关文章:

  • 晨辉面试抽签和评分管理系统之十:如何搭建自己的数据库服务器,使用本软件的网络版
  • 基于springboot的自习室预订系统
  • MCP Server开发的入门教程(python和pip)
  • 漫话架构师|什么是系统架构设计师(开篇)
  • Qt/C++进程间通信:QSharedMemory 使用详解(附演示Demo)
  • 为深度学习创建PyTorch张量 - 最佳选项
  • 中伟视界:AI算法如何精准识别井下与传送带上堆料,提升矿山安全生产效率,减少事故风险
  • Windows (rust) vulkan 画一个三角形: 窗口创建与渲染初始化
  • Python 在PDF中插入文本超链接和图片超链接 (详解)
  • 怎么制作线上报名表_解锁报名新体验
  • Skyvern:基于LLM和CV的开源RPA
  • Cookie详情(含前端和后端相关示例)
  • mysql root密码重置
  • js冒泡排序
  • 828华为云征文|华为云Flexus X实例Windows Server 2019安装护卫神防火墙——为企业运维安全发挥重要作用!!!
  • vue2加载本地html文件
  • SQL - 进阶语法(二)约束
  • linux----进程地址空间
  • 【读写分离?聊聊Mysql多数据源实现读写分离的几种方案】
  • keepalived+lvs集群,实现高可用
  • 初识Jenkins持续集成系统
  • 《ElementUI/Plus 踩坑》el-table + sortablejs 拖拽顺序错乱(Vue2/3适用)
  • SSH 远程连接到 Linux 服务器上的 SQLite
  • 数据结构——广义表
  • uni-app+vue3微信小程序怎么获取 this.getTabBar()
  • 计算机网络(九) —— Tcp协议详解