记录解决springboot项目上传图片到本地,在html里不能回显的问题
项目场景:
项目场景:在我的博客系统里:有个相册模块:需要把图片上传到项目里,在html页面上显示


解决方案
1.建一个文件夹
例如在windows系统下。可以在项目根目录下建个photos文件夹,把上传的图片文件保存到这个文件夹里

2.实现WebMvcConfigurer
重写addResourceHandlers方法
@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {@Value("${uploadLinuxTempFilePath}")private String linuxUploadPath;/*** 解决上传图片后不能立即访问到(回显)的问题* */@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// http://localhost//upload_img/photos/1720864412594.png// 访问上传到本地的图片String path;String os = System.getProperty("os.name");if(os.startsWith("Windows")){path = System.getProperty("user.dir")+"/photos/";}else {path = linuxUploadPath;}// 例如访问http://111.229.128.4:80//upload_img/1720877954983.jpg// 只要匹配到/upload_img/路径,springmvc会自动映射到你建的 path 路径下registry.addResourceHandler("/upload_img/**").addResourceLocations("file:"+path);}
3.保存到表里的文件路径
我这个是保存到linux上,所以ip是我的服务器ip

如果是上传到你的windows电脑上, ip就是127.0.0.1
4.附上传图片的代码
package com.lizhenqiang.myblog.util;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;@Service
@Slf4j
public class UploadFileUtil {@Value("${uploadLinuxTempFilePath}")private String linuxUploadPath;@Value("${server.port}")private int port;@Value("${linuxIP}")private String linuxIp;public String uploadFileToLocal(MultipartFile file) {// [1] 获取项目目录// http://localhost//upload_img/1720864412594.pnglog.info("[开始] 拼接保存到本地的完整文件路径");String userDir = System.getProperty("user.dir");// [2] 在项目目录下新建一个文件夹String targetDir = "/photos/";// [3] 获取文件后缀String originalFilename = file.getOriginalFilename();String[] split = originalFilename.split("\\.");String suffix = split[1];// [4] 组装完整文件路径String fileName = System.currentTimeMillis()+ "." +suffix;String filePath;String prefixIp;String os = System.getProperty("os.name");if(os.startsWith("Windows")){filePath = userDir + targetDir + fileName;prefixIp = "http://127.0.0.1:"+port+"//upload_img/";}else {filePath = linuxUploadPath + fileName ;prefixIp = "http://"+linuxIp+":"+port+"//upload_img/";}// [4.1] 判断路径是否存在, 如果不存在则创建this.createDirectoryIfNotExits(filePath);log.info("[结束] 拼接保存到本地的完整文件路径, 文件路径 [{}]", filePath);// [5] 获取输入流、创建输出流log.info("[开始] 复制文件到本地, 文件路径 [{}]", filePath);try (InputStream inputStream = file.getInputStream();FileOutputStream outputStream = new FileOutputStream(filePath)) {// [6] 从输入流读, 往输出流写int readBytes;byte[] bytes = new byte[1024];while ((readBytes = inputStream.read(bytes)) != -1) {outputStream.write(bytes, 0, readBytes);}// [7] 刷新输出流outputStream.flush();log.info("[结束] 复制文件到本地, 文件路径 [{}]", filePath);// [8] 返回文件完整路径return prefixIp+ fileName;} catch (IOException e) {log.info("[失败] 复制文件到本地, 文件路径 [{}], 异常信息 [{}]", filePath, e.getMessage());throw new RuntimeException("复制文件到本地失败");}}/*** 判断文件路径是否存在, 不存在则创建** @param path 文件完整路径*/public void createDirectoryIfNotExits(String path) {/*逻辑:1. 判断是否是文件夹, 如果是文件夹, 在判断文件夹是否存在, 不存在则创建2. 如果不是文件夹, 就获取它的目录, 不存在则创建*/// [1] 判断是否是文件夹, 如果是文件夹, 在判断文件夹是否存在, 不存在则创建File file = new File(path);if (file.isDirectory()) {if (!file.exists()) {file.mkdirs();}} else {// [2] 如果不是文件夹, 就获取它的目录, 不存在则创建File parentFile = file.getParentFile();if (!parentFile.exists()) {parentFile.mkdirs();}}}}
5.欢迎访问我的博客系统
基于Java(Springboot)可以用做毕业设计的个人博客系统,包括网站前台和后台管理系统两部分。网站前台包括首页、归档页面、相册页面、留言页面、关于我页面。支持用户注册与登录,注册时使用邮箱发送验证码。
后台管理系统包括写博客、管理博客。对分类、标签、相册、用户的增删改查。还有对访客的记录。
网站链接 前台: http://111.229.128.4/
后台: http://111.229.128.4/admin
用户名/密码:admin/admin
前端框架:Layui
后端:Springboot
数据库:MySQL,redis
欢迎访问!
相关文章:
记录解决springboot项目上传图片到本地,在html里不能回显的问题
项目场景: 项目场景:在我的博客系统里:有个相册模块:需要把图片上传到项目里,在html页面上显示 解决方案 1.建一个文件夹 例如在windows系统下。可以在项目根目录下建个photos文件夹,把上传的图片文件…...
C++ 中 const 关键字
C 中 const 关键字 2009-02-19 2024-07-23 补充C11后的做法 在 C 中,const 是一个关键字(也称为保留字),它用于指定变量或对象的值在初始化后不能被修改。关键字是编程语言中具有特殊含义的词汇,编译器会识别这些词并…...
客梯自动监测识别摄像机
当今社会,随着城市建设的快速发展,客梯作为现代化建筑不可或缺的一部分,其安全性与效率显得尤为重要。为了提升客梯的安全管理水平,智能监测技术应运而生,尤其是客梯自动监测识别摄像机系统的应用,为乘客和…...
为什么那么多人学习AI绘画?工资香啊!
在当今这个科技日新月异的时代,AI绘画作为数字艺术与人工智能融合的璀璨成果,正吸引着无数人投身其中,而“工资香啊!”无疑是这一热潮背后不可忽视的驱动力之一。 AI绘画的高薪待遇是吸引众多学习者的关键因素。随着市场对AI艺术…...
国产JS库(js-tool-big-box)7月度总结
js-tool-big-box开发已经有3个月了,团队内的小伙伴进行了热烈的讨论,持续做了功能迭代。小伙伴们也做了艰苦卓绝的文档分享,有纯功能分享类的,有带有小故事的,有朋友们利用自己独自网站分发分享的。7月份快要结束了&am…...
c++ 高精度加法(只支持正整数)
再给大家带来一篇高精度,不过这次是高精度加法!话不多说,开整! 声明 与之前那篇文章一样,如果看起来费劲可以结合总代码来看 定义 由于加法进位最多进1位,所以我们的结果ans[]的长度定义为两个加数中最…...
python键盘操作工具:ctypes、pyautogui
这里模拟 Win Ctrl L 组合键 1、ctypes ctypes库,它允许我们直接调用Windows API来模拟键盘输入。 import ctypes import time# 定义所需的常量和结构 LONG ctypes.c_long DWORD ctypes.c_ulong ULONG_PTR ctypes.POINTER(DWORD) WORD ctypes.c_ushortclass…...
计算机网络发展历史
定义和基本概念 计算机网络是由多个计算设备通过通信线路连接起来的集合,这些设备能够互相交换数据、消息和资源。计算机网络的核心功能是实现数据的远程传输和资源共享,它使得地理位置的限制被大大减弱,极大地促进了信息的自由流动和人类社…...
记录安装android studio踩的坑 win7系统
最近在一台新电脑上安装android studio,报了很多错误,也是费了大劲才解决,发出来大家一起避免一些问题,找到解决方法。 安装时一定要先安装jdk,cmd命令行用java -version查当前的版本,没有的话,先安装jdk,g…...
Python图形编程-PyGame快速入门
PyGame快速入门 文章目录 PyGame快速入门1、什么是PyGame2、安装PyGame3、创建PyGame窗口4、处理事件5、绘制对象6、移动对象7、加载和显示图像8、播放声音9、处理用户输入10、碰撞检测11、动画精灵12、管理游戏状态13、Pygame 中的典型主游戏循环1、什么是PyGame Pygame 是一…...
邦芒宝典:8种方法调整职场心态
在职场中拼斗当然要有好的心态,您知道职场心态如何调整吗? 方法1:自我调整 “思想可以使天堂变成地狱,也可以使地狱变成天堂。”你不能样样顺利,但可以事事尽心;你不能左右天气,但可以改变心情;你…...
华为OD2024D卷机试题汇总,含D量50%+,按算法分类刷题,事半功倍
目录 专栏导读华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢? 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、链表5、栈6、滑动窗口7、二叉树8、并查集9、矩阵 三、算法1、基础算法① 贪心思维② 二分查…...
Unity UGUI 之 Graphic Raycaster
本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 首先手册连接如下: Unity - Manual: Graphic Raycaster 笔记来源于ÿ…...
类和对象——相关的零碎知识
前提提示: 其实C中的类和对象,最重要的是6个默认函数,如有忘记,请移步到:类和对象。本章是对于一些细节知识的补充和拓展。 1. 隐示类型转换 在运算时,运算符左右两边的操作数的类型不同,编译器…...
【hadoop大数据集群 1】
hadoop大数据集群 1 文章目录 hadoop大数据集群 1一、环境配置1.安装虚拟机2.换源3.安装工具4.安装JDK5.安装Hadoop 一、环境配置 折腾了一下午/(ㄒoㄒ)/~~ 1.安装虚拟机 参考视频:https://www.bilibili.com/video/BV18y4y1G7JA?p17&vd_sourcee15e83ac6b22a…...
TQSDRPI开发板教程:实现PL端的UDP回环与GPSDO
本教程将完成一个全面的UDP运行流程与GPSDO测试,从下载项目的源代码开始,通过编译过程,最终将项目部署到目标板卡上运行演示。此外,我们还介绍如何修改板卡的IP地址,以便更好地适应您的网络环境或项目需求。 首先从Gi…...
array.some() ==> 查找数组list中,是否有包含与当前currKey的值不一样的misId
需求: const list [ {misId: e, name: 小白}, {misId: e, name: 小白白}, {misId: r, name: 小王}, {misId: r, name: 小小王} ] let currKey r 查找数组list中,是否有包含与当前currKey的值不一样的misId 解决: 要查找数组lis…...
最简单的typora+gitee+picgo配置图床
typoragiteepicgo图床 你是否因为管理图片而感到头大?是时候了解一下 Typora、Gitee 和 PicGo 这个超级三剑客了,它们可以帮你轻松打造自己的图床,让你的博客图片管理变得简单又有趣。让我们开始这场神奇的图床之旅吧! Typora …...
【黄啊码】GPT的相关名词解释
GPT是一种基于互联网的、可用数据来训练的、文本生成的深度学习模型 GPT的核心技术是变换器(Transformer),这是一种神经网络结构,可以有效地处理序列数据,比如文本、语音、图像等。GPT使用了大量的预训练数据&#…...
git stash 命令详解
git stash 描述 git stash 命令用于将当前工作目录中的未提交更改(包括暂存区和工作区的更改)保存到一个栈中,并恢复工作目录到干净的 HEAD 状态。这样您可以在不提交当前更改的情况下,切换到其他分支或进行其他操作。后续可以通…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
