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

txt格式单词导入有道词典生词本 (java代码方式)

txt格式单词导入有道词典生词本 (java代码方式) 首先要求txt文档里单词的格式,大概需要像这种: 每行是一个单词,格式为:英文单词空格词性单词意思。 注意 导出单词本的名字就是你 txt 文件的名字 我这里是 公共英语三级 单词本 …...

轨迹优化 | 基于ESDF的共轭梯度优化算法(附ROS C++/Python仿真)

目录 0 专栏介绍1 数值优化:共轭梯度法2 基于共轭梯度法的轨迹优化2.1 障碍约束函数2.2 曲率约束函数2.3 平滑约束函数 3 算法仿真3.1 ROS C实现3.2 Python实现 0 专栏介绍 🔥课程设计、毕业设计、创新竞赛、学术研究必备!本专栏涉及更高阶的…...

深入浅出WebRTC—ALR

ALR(Application Limited Region)指的是网络传输过程中,由于应用层的限制(而非网络拥塞)导致带宽未被充分利用的情况。在这种情况下,应用层可能因为处理能力、手动配置或其他因素无法充分利用可用带宽&…...

BSV区块链技术现实应用原理解析

BSV区块链以其卓越的可扩展性、坚如磐石的安全性、极低的交易成本等特性,成为满足企业当下需求并为企业未来成功奠基铺路的理想技术。 BSV协会近期发布了一个题为《驾驭数字化转型:在自动化世界中建立信任——区块链在数据保护和交易优化中的角色》的报…...

七大基于比较的排序算法

目录 一、基于比较的排序算法概述 1. 插入排序(Insertion Sort) 2. 选择排序(Selection Sort) 3. 冒泡排序(Bubble Sort) 4. 归并排序(Merge Sort) 5. 快速排序(Qu…...

web前端 React 框架面试200题(四)

面试题 97. React 两种路由模式的区别?hash和history? 参考回答: 1: hash路由 hash模式是通过改变锚点(#)来更新页面URL,并不会触发页面重新加载,我们可以通过window.onhashchange监听到hash的改变,从而处…...

5.Fabric的共识机制

在Fabric中,有以下3中典型共识机制。 Solo共识 solo共识机制只能用于单节点模式,即只能有一个Orderer节点,因此,其共识过程很简单,每接收到一个交易信息,就在共识模块的控制下产生区块并广播给节点存储到账本中。 Solo 模式下的共识只适用于一个Orderer节点,所以可以在…...

【safari】react在safari浏览器中,遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。如何解决

在safari浏览器中,可能会遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。 PS:由于useState是一个普通的函数, 定义为() > void;因此此处不能用await/async替代setTimeout,只能用在返…...

京准:GPS北斗卫星授时信号安全隔离防护装置

京准:GPS北斗卫星授时信号安全隔离防护装置 京准:GPS北斗卫星授时信号安全隔离防护装置 1、主要特点 ★信号加固功能: GPS/BDS单系统信号拒止情况下(包含受到GPS L1欺骗干扰、GPS L1压制干扰、BDS B1欺骗干扰、BDS B1压制干扰&…...

解决方案架构师系列 - AWS - Pinpoint

AWS Pinpoint介绍 Amazon Pinpoint 为营销人员和开发人员提供了一款可自定义的工具,助力他们大规模地开展跨渠道、行业和活动的客户通信。 Amazon Pinpoint是一个全面的客户参与平台,‌旨在帮助营销人员和开发人员大规模地开展跨渠道、‌行业和活动的客…...

MF173:将多个工作表转换成PDF文件

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…...

Docker、containerd、CRI-O 和 runc 之间的区别

容器与 Docker 这个名称并不紧密相关。你可以使用其他工具来运行容器 您可以使用 Docker 或一堆非Docker 的其他工具来运行容器。docker只是众多选项之一,Docker(公司)在生态系统中创建了一些很棒的工具,但不是全部。 容器方面有…...

PRISM-Python 中的规则一个简单的 Python 规则感应系统

欢迎来到雲闪世界.PRISM 是一种现有算法(尽管我确实创建了一个 Python 实现),PRISM 相对简单,但在机器学习中,有时最复杂的解决方案效果最好,有时最简单的解决方案效果最好。然而,当我们希望建立…...

DB-GPT:LLM应用的集大成者

整体架构 架构解读 可以看到,DB-GPT把架构抽象为7层,自下而上分别为: 运行环境:支持本地/云端&单机/分布式等部署方式。顺便一提,RAY是蚂蚁深度参与的一个开源项目,所以对RAY功能的支持应该非常完善。…...

汉明权重(Hamming Weight)(统计数据中1的个数)VP-SWAR算法

汉明权重(Hamming Weight)(统计数据中1的个数)VP-SWAR算法 定义 汉明重量是一串符号中非零符号的个数。它等于同样长度的全零符号串的汉明距离(在信息论中,两个等长字符串之间的汉明距离等于两个字符串对应位置的不同…...

基于 PyTorch 的模型瘦身三部曲:量化、剪枝和蒸馏,让模型更短小精悍!

基于 PyTorch 的模型量化、剪枝和蒸馏 1. 模型量化1.1 原理介绍1.2 PyTorch 实现 2. 模型剪枝2.1 原理介绍2.2 PyTorch 实现 3. 模型蒸馏3.1 原理介绍3.2 PyTorch 实现 参考文献 1. 模型量化 1.1 原理介绍 模型量化是将模型参数从高精度(通常是 float32&#xff0…...

二、原型模式

文章目录 1 基本介绍2 实现方式深浅拷贝目标2.1 使用 Object 的 clone() 方法2.1.1 代码2.1.2 特性2.1.3 实现深拷贝 2.2 在 clone() 方法中使用序列化2.2.1 代码 2.2.2 特性 3 实现的要点4 Spring 中的原型模式5 原型模式的类图及角色5.1 类图5.1.1 不限制语言5.1.2 在 Java 中…...

【目标检测】Anaconda+PyTorch(GPU)+PyCharm(Yolo5)配置

前言 本文主要介绍在windows系统上的Anaconda、PyTorch、PyCharm、Yolov5关键步骤安装,为使用yolo所需的环境配置完善。同时也算是记录下我的配置流程,为以后用到的时候能笔记查阅。 Anaconda 软件安装 Anaconda官网:https://www.anaconda…...

Django实战项目之进销存数据分析报表——第二天:项目创建和 PyCharm 配置

在上一篇博客中,我们讨论了如何搭建一个全栈 Web 应用的开发环境,包括 Python 环境的创建、Django 和 MySQL 的安装以及前端技术栈的选择。现在,让我们继续深入,学习如何在 PyCharm 中创建一个新的 Django 项目并进行配置。 一…...

静态路由实验

1.实验拓扑图 二、实验要求 1.R6为ISP,接口IP地址均为公有地址,该设备只能配置IP地址,之后不能再对其进行任何配置; 2.R1-R5为局域网,私有IP地址192.168.1.0/24,请合理分配; 3.R1、R2、R4&…...

VSCode STM32嵌入式开发插件记录

要卸载之前搭建的VSCode嵌入式开发环境了,记录一下用的插件。 1.Cortex-Debug https://github.com/Marus/cortex-debug 2.Embedded IDE https://github.com/github0null/eide 3.Keil uVision Assistant https://github.com/jacksonjim/keil-assistant/ 4.RTO…...

linux cpu 占用超100% 分析。

感谢: https://www.cnblogs.com/wolfstark/p/16450131.html 总结&#xff1a; 查看进程中各个线程占用百分比 top -H -p <pid> 某线程100%了 说明 任务处理不过来 会卡 但是永远不可能超100% 系统监视器里面看到的是 所有线程占用的 总和会超100%。 所以最好的情况是&…...

自然学习法和科学学习法

一、自然学习法 自然学习法&#xff1a;什么事自然学习法&#xff0c;特意让kimi来回答了一下。所谓的自然学习法说的俗一点就是野路子学习方法。这种学习方法的特点是“慢”“没有系统性”&#xff0c;学完之后感觉都会了&#xff0c;但是又感觉什么都不会。 二、科学学习法 …...

力扣第二十四题——两两交换链表中的节点

内容介绍 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff…...

C语言柔性数组详解

目录 1.柔性数组 2.柔性数组的特点 3.柔性数组的使用 4.柔性数组的优势 1.柔性数组 C99 中&#xff0c;结构体中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做『柔性数组』成员。 例如&#xff1a; struct S {char c;int n;int arr[];//柔性数组 }; struct …...

自动驾驶---视觉Transformer的应用

1 背景 在过去的几年&#xff0c;随着自动驾驶技术的不断发展&#xff0c;神经网络逐渐进入人们的视野。Transformer的应用也越来越广泛&#xff0c;逐步走向自动驾驶技术的前沿。笔者也在博客《人工智能---什么是Transformer?》中大概介绍了Transformer的一些内容&#xff1a…...

预训练语言模型实践笔记

Roberta output_hidden_statesTrue和last_hidden_states和pooler_output 在使用像BERT或RoBERTa这样的transformer模型时&#xff0c;output_hidden_states和last_hidden_state是两个不同的概念。 output_hidden_states: 这是一个布尔值&#xff0c;决定了模型是否应该返回所…...

Perl 哈希

Perl 哈希 Perl 哈希是一种强大的数据结构&#xff0c;用于存储键值对集合。它是 Perl 语言的核心特性之一&#xff0c;广泛应用于各种编程任务中。本文将详细介绍 Perl 哈希的概念、用法和最佳实践。 什么是 Perl 哈希&#xff1f; Perl 哈希是一种关联数组&#xff0c;其中…...

Linux之Mysql索引和优化

一、MySQL 索引 索引作为一种数据结构,其用途是用于提升数据的检索效率。 1、索引分类 - 普通索引(INDEX):索引列值可重复 - 唯一索引(UNIQUE):索引列值必须唯一,可以为NULL - 主键索引(PRIMARY KEY):索引列值必须唯一,不能为NULL,一个表只能有一个主键索引 - 全…...

springboot业务逻辑写在controller层吗

Spring Boot中的业务逻辑不应该直接写在Controller层。‌ 在Spring Boot项目中&#xff0c;‌通常将业务逻辑分为几个层次&#xff0c;‌包括Controller层、‌Service层、‌Mapper层和Entity层。‌ 1.其中&#xff0c;‌Controller层主要负责处理HTTP请求&#xff0c;‌通过注…...