基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持本地图片上传与回显的功能实现(一)
更多ruoyi-nbcio功能请看演示系统
gitee源代码地址
前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio
演示地址:RuoYi-Nbcio后台管理系统
原先这个基于RuoYi-Flowable-Plus的这个不支持本地图片上传,只支持oss图片上传,所以需要增加相应的本地上传图片功能。
1、先要理解原先若依的本地图片上传与显示的过程
图片上传
现在想要去上传一张照片,首先前端调用上传接口
/**
* 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/2023/10/11/nbcio_20231011222512A001.png"
msg: "操作成功"
}
web前端将其拼接,就可以访问到服务器上的本地文件
http://localhost/dev-api//profile/avatar/2023/10/11/nbcio_20231011222512A001.png
图片路径
前端
可以看到图片路径有点陌生,这里使用到了代理;路径首先被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/2023/10/11/nbcio_20231011222512A001.png
-- 此时,再将请求交给后端处理
http://localhost:8080/profile/avatar/2023/10/11/nbcio_20231011222512A001.png
后端
后端对匹配的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
/home/nbcio/upload
这样图片数据便被从本地拿到,经历了 前端 -> 后端 -> 本地文件 的过程!
2、根据上面的一些原理,现在思路修改一下,我的已经去掉/dev-api,同时也取消什么代理这些
接下来一步一步进行修改
3、application.yml增加下面内容,主要是两项与上传文件相关的内容
# 项目相关配置
ruoyi:# 名称name: RuoYi-Nbcio# 版本version: ${ruoyi-nbcio.version}# 版权年份copyrightYear: 2023# 实例演示开关demoEnabled: true# 本地:local\Minio:minio\阿里云:aliossuploadtype: local#文件上传根目录 设置profile: /home/nbcio/upload# 获取ip地址开关addressEnabled: true# 缓存懒加载cacheLazy: false
4、application-dev.ym 先增加下面一项
nbcio: localfilehttp: http://localhost:9060 #上传图片的http基地址
5、ResourcesConfig.java修改如下:
package com.ruoyi.framework.config;import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.framework.interceptor.PlusWebInvokeTimeInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** 通用配置** @author Lion Li, nbacheng*/
@Configuration
public class ResourcesConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 全局访问性能拦截registry.addInterceptor(new PlusWebInvokeTimeInterceptor());}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {/** 本地文件上传路径 */registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + RuoYiConfig.getProfile() + "/");}/*** 跨域配置*/@Beanpublic CorsFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();config.setAllowCredentials(true);// 设置访问源地址config.addAllowedOriginPattern("*");// 设置访问源请求头config.addAllowedHeader("*");// 设置访问源请求方法config.addAllowedMethod("*");// 有效期 1800秒config.setMaxAge(1800L);// 添加映射路径,拦截一切请求UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", config);// 返回新的CorsFilterreturn new CorsFilter(source);}
}
相关文章:
基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持本地图片上传与回显的功能实现(一)
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 原先这个基于RuoYi-Flowable-Plus的这个不支持本地图片上传,只支持oss图片上传,所以…...
2023年建筑电工(建筑特殊工种)证考试题库及建筑电工(建筑特殊工种)试题解析
题库来源:安全生产模拟考试一点通公众号小程序 2023年建筑电工(建筑特殊工种)证考试题库及建筑电工(建筑特殊工种)试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人…...
Puppeteer实现上下滚动、打开新Tab、用户数据保存(三)
Puppeteer实现上下滚动、打开新Tab、用户数据保存(三) Puppeteer实现上下滚动、打开新Tab、用户数据保存(三)一、实现上下滚动二、打开新Tab三、用户数据保存四、效果演示 一、实现上下滚动 在自动化测试中,我们需要能…...
ArduPilot开源飞控之AP_InertialNav
ArduPilot开源飞控之AP_InertialNav 1. 源由2. 调用关系3. 重要例程3.1 read_inertia3.2 update 4. 封装接口4.1 get_filter_status4.2 get_position_neu_cm4.3 get_position_xy_cm4.4 get_position_z_up_cm4.5 get_velocity_neu_cms4.6 get_velocity_xy_cms4.7 get_speed_xy_c…...
DataX工具部署与使用(PostgreSQL to Oracle)
目录: 一、准备环境(1)安装JDK(2)检查Python版本(3)DataX 解压及测试 二、同步测试1、配置清单2、操作示例(1)同步测试环境(2)准备测试表…...
【PyTorch2 之027】在 PyTorch 中的R-CNN、Fast R-CNN和 Faster R-CNN
一、说明 亮点:对象检测是计算机视觉中最重要的任务之一。在这篇文章中,我们将概述最有影响力的对象检测算法家族之一:R-CNN、Fast R-CNN 和 Faster R-CNN。我们将重点介绍它们中的每一个的主要新颖性和改进。 最后,我们将专注于 …...
C++学习——C++函数的编译、成员函数的调用、this指针详解
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 从博文的分析中可以看出,对象的内存中只保留了成员变量,除此之外没有任何其他信息,程序运行时不知道 stu 的类型为 Student,也不知道它…...
Pulsar Manager和dashboard部署和启用认证
Pulsar Manager部署和启用认证 官方地址: https://pulsar.apache.org/docs/zh-CN/next/administration-pulsar-manager/ Pulsar Manager 是一个网页式可视化管理与监测工具,支持多环境下的动态配置。可用于管理和监测租户、命名空间、topic、订阅、broker、集群等…...
K8S环境搭建
K8S环境搭建 前置条件 部署3台VM,一台作为master,两台作为slave需要保障vm之间网络是互通的 为vm安装docker # 安装/更新 yum-utils yum install -y yum-utils#添加阿里镜像稳定版仓库 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce…...
常用的软件项目管理工具一览
软件项目管理工具是帮助团队成功管理和完成软件开发项目的软件程序和应用程序。根据项目及其规模和复杂性,可以使用各种各样的这些工具来协助完成任务,从任务跟踪和调度,到项目报告,到版本控制和协作。 项目经理对软件项目的整体成…...
关于网络协议的若干问题(五)
1、DH 算法会因为传输随机数被破解吗? 答:DH 算法的交换材料要分公钥部分和私钥部分,公钥部分和其他非对称加密一样,都是可以传输的,所以对于安全性是没有影响的,而且传输材料远比传输原始的公钥更加安全。…...
TensorFlow入门(十七、神经元的拟合原理)
深度学习的概念源于人工神经网络的研究,神经网络是由多个神经元组成,。一个神经元由以下几个关键知识点组成: ①激活函数 ②损失函数 ③梯度下降 单个神经元的网络模型如图所示 用计算公式表达如下: z为输出的结果,x为输入,w为权重,b为偏置值。z…...
VSCODE配置C和C++
VSCode 运行 C/C 怎么配置? - 忆梦怀思的回答 - 知乎 https://www.zhihu.com/question/577315418/answer/3232537840 这个很好用,简单明白。 其中最后我的只配置了tasks.json就成功了。...
位于同一子网下的ip在子网掩码配置错误的情况下如何进行通信(wireshrak抓包分析)
前言 最近看书发现个问题,正好想学习下wireshark的使用,于是抓包做了下实验。 问题是这样的,假设有服务器A和服务器B,正确配置下两者处于同一子网;此时B的网络配置正确,而A在配置子网掩码时出了错ÿ…...
Dockerfile镜像实战
目录 1、构建SSH镜像 2、Systemctl镜像 3、nginx镜像 4、tomcat 镜像 5、mysql镜像 1、构建SSH镜像 cd /opt/sshd vim Dockerfile #第一行必须指明基于的基础镜像 FROM centos:7 #作者信息 MAINTAINER this is ssh image <hmj> #镜像的操作指令 RUN yum -y update R…...
企业如何选择安全又稳定的文件传输协议
企业无论是内部的数据共享,还是与外部的合作交流,都需要通过网络进行文件的传输和交换。然而,文件传输它涉及到多方面的因素,例如文件的大小、数量、类型、敏感性、传输距离、网络环境等。这些因素都会影响到文件传输的各个方面&a…...
Linux Kernel 4.13 RC6发布:正式版9月3日发布
美国当地时间上周末,大神Linus Torvalds发布了Linux Kernel 4.13内核的又一候选版本。上周发布的RC5版本更新幅度也要比上上周的RC4要小,Linus Torvalds表示本周发布的RC6版本属于常规更新,在过去一周的开发过程中并没有出现任何意外。RC6版本…...
C++学习——C++中const的新花样
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 关于C语言中const的用法,见《C语言const的用法详解》。 一、C中const的新花样 在C语言中,const用来限制一个变量,表示这个变量不能被修改…...
【Linux环境搭建】五、Linux(CentOS7)编译源码安装Subversion
Subversion(简称为SVN)是一种版本控制系统,能够管理和跟踪项目开发中的代码变化。Subversion最初由CollabNet公司开发,现已成为Apache软件基金会的顶级项目之一。 Subversion使用一个中央仓库来存储所有项目文件和历史记录。开发人…...
微信小程序入门讲解【超详细】
一. 微信小程序简介 1.1 什么是小程序 2017年度百度百科十大热词之一 微信小程序(wei xin xiao cheng xu),简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用( 张小龙对其的定义是无需安装…...
UCI心脏病数据集实战:用XGBoost构建预测模型的全流程指南(附特征重要性分析)
UCI心脏病数据集实战:用XGBoost构建预测模型的全流程指南(附特征重要性分析) 医疗数据科学正在重塑现代医学诊断方式。当我在克利夫兰诊所实习期间,亲眼见证了机器学习模型如何辅助医生识别高风险心脏病患者。本文将带您完整复现这…...
Glide框架在Java中的高效集成与动图加载实践
1. 为什么选择Glide处理Java项目中的动图加载 第一次在Android项目里遇到动图加载需求时,我试过用原生ImageView逐帧解析,结果内存直接爆了。后来发现Glide这个宝藏框架,它就像个智能的动图管家,把复杂的解码、内存管理、缓存优化…...
基于Python的多媒体信息共享平台毕业设计源码
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于Python的多媒体信息共享平台,以满足现代网络环境下多媒体信息传播的需求。具体研究目的如下:构建一个高效、…...
杨立昆新模型杀疯了,1500万参数单GPU就能碾压大厂?
就在前几天,AI教父、图灵奖得主杨立昆刚发了个新模型,名叫LeWorldModel,论文一发出,整个圈子瞬间炸锅。说出来你们可能都不信——这货只有1500万参数,单块GPU几个小时就能训完,随便一个研究者都拉起来跑一遍…...
开源!手搓ESP-VoCat 喵伴桌面AI助手,帮你养萌宠 OpenClaw龙虾,内置豆包,会听、会动、会陪伴
模组选型:ttps://item.taobao.com/item.htm?ftt&id1033585120956&spma21dvs.23580594.0.0.4fee2c1bAqCiqc&skuId6211360130611 ESP-VoCat 喵伴是乐鑫携手火山引擎扣子大模型团队打造的智能 AI 开发套件,适用于玩具、智能音箱、智…...
Hunyuan-MT-7B部署教程:Pixel Language Portal与Prometheus监控系统集成
Hunyuan-MT-7B部署教程:Pixel Language Portal与Prometheus监控系统集成 1. 项目概述 Pixel Language Portal是一款基于腾讯Hunyuan-MT-7B大模型构建的创新翻译工具,将传统翻译体验重构为16-bit像素冒险风格。本教程将指导您完成从基础部署到与Prometh…...
便利店老板的备货神器——基于粒子群优化支持向量机的单日关东煮销量预测
基于粒子群优化支持向量机(PSO-SVM)的时间序列预测 PSO-SVM时间序列 matlab代码暂无Matlab版本要求 -- 推荐 2018B 版本及以上 采用 Libsvm 工具箱(无需安装,可直接运行),仅支持 Windows 64位系统昨天便利店刚进了一箱新口味的魔芋…...
STM32F4读写SD卡:填一填ST官方HAL库的坑
使用STM32读写SD卡在低功耗存储中的应用是比较常见的,但是网上大多数资料都是基于标准库或者基于寄存器的开发。随着嵌入式设备越来越复杂,使用HAL库能够大大降低开发者的学习成本,从而提高开发效率。近年来,ST官方主推以STM32Cub…...
国产铷原子钟 快稳铷原子钟突破铷钟启动时长痛点 铷钟 特种铷原子钟
在数字化浪潮席卷全球的今天,时频同步已成为支撑通信、电力、国防、科研等关键领域稳定运行的核心基石。从6G基站的纳秒级协同,到智能电网的故障精准定位,再到北斗导航的车道级精度保障,每一个场景都对时间频率的准确度、稳定度提…...
PvZ Toolkit:植物大战僵尸PC版终极修改器使用指南
PvZ Toolkit:植物大战僵尸PC版终极修改器使用指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 还在为植物大战僵尸中资源不足而烦恼吗?PvZ Toolkit是一款专为植物大战僵尸…...
