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

记录解决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 笔记来源于&#xff…...

类和对象——相关的零碎知识

前提提示: 其实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 状态。这样您可以在不提交当前更改的情况下,切换到其他分支或进行其他操作。后续可以通…...

终极指南:快速免费将OFD转PDF的完整解决方案

终极指南:快速免费将OFD转PDF的完整解决方案 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf OFD(开放版式文档)作为中国的标准电子文档格式,在电子发票…...

Taotoken用量看板如何帮助团队清晰掌控API成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken用量看板如何帮助团队清晰掌控API成本 对于使用大模型API进行开发的团队而言,成本控制一直是一个核心的管理挑…...

yuzu模拟器完全指南:免费在PC上畅玩任天堂Switch游戏的终极教程

yuzu模拟器完全指南:免费在PC上畅玩任天堂Switch游戏的终极教程 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu是目前最受欢迎的开源任天堂Switch模拟器,让你能够在Windows、Linux和An…...

3步解锁《鸣潮》120帧体验:WaveTools工具箱完全指南

3步解锁《鸣潮》120帧体验:WaveTools工具箱完全指南 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 还在为《鸣潮》游戏卡顿、帧率限制而烦恼吗?是否觉得60帧的游戏体验无法充分发挥…...

新手避坑指南:用STC89C52和L298N驱动模块搞定智能小车的第一步(附完整代码)

51单片机智能小车实战:从硬件搭建到代码调试的避坑手册 第一次尝试用STC89C52和L298N驱动模块制作智能小车时,我遇到了无数令人抓狂的问题——电机突然反转、PWM信号不稳定、电源莫名其妙发热。这些问题消耗了我整整三个周末的时间。本文将分享那些教程里…...

终极键盘打字练习指南:Qwerty Learner 免费安装与使用教程

终极键盘打字练习指南:Qwerty Learner 免费安装与使用教程 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https:/…...

暗黑3按键宏革命:D3KeyHelper图形化配置完全指南

暗黑3按键宏革命:D3KeyHelper图形化配置完全指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 厌倦了在暗黑3中重复点击技能键&#xf…...

智能制造系统中的物理因子有哪些

在智能制造系统的工业机理建模中,物理因子(Physical Factors)是指那些描述生产过程、设备状态及环境变化的物理变量。根据其在生产中的作用,通常可以归纳为以下五大类: 1. 动力学与力学因子(机器的“骨架”…...

观察使用 Taotoken 后 Agent 项目的月度 token 消耗与成本趋势

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察使用 Taotoken 后 Agent 项目的月度 token 消耗与成本趋势 对于一个持续运行的 Agent 项目,清晰了解其资源消耗和成…...

上海AI Lab:真实场景虚拟细胞模型基准评测

摘要 虚拟细胞模型旨在通过计算预测细胞对各类扰动的响应,已成为药物研发与精准医疗的前沿手段。但当前研究存在明显缺口:各类模型在标准基准测试中表现优异,但其预测结果在实际应用中的生物学意义尚不明确。这主要源于现有评估方案的缺陷——评估设置过度简化、流程不统一…...