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

Springboot项目实现简单的文件服务器,实现文件上传+图片及文件回显

文章目录

  • 写在前面
  • 一、配置
    • 1、application.properties
    • 2、webMvc配置
    • 3、查看效果
  • 二、文件上传

写在前面

平常工作中的项目,上传的文件一般都会传到对象存储云服务中。当接手一个小项目,如何自己动手搭建一个文件服务器,实现图片、文件的回显,可以通过http请求获取到呢?

注!本文以Springboot为基础,在其web环境进行搭建的

一、配置

1、application.properties

local.file.dir=D:/file/
local.file.path=/data

2、webMvc配置

@Configuration
public class WebmvcConfigurer implements WebMvcConfigurer {@Value("${local.file.dir}")private String localFileDir;@Value("${local.file.path}")private String localFilePath;@Overridepublic void addResourceHandlers(@NotNull ResourceHandlerRegistry registry) {File file = new File(localFileDir);if (file.exists() && file.isFile()) {throw new RuntimeException("本地路径已被占用:" + localFileDir);}if(!file.exists()) {file.mkdirs();}registry.addResourceHandler(localFilePath + "/**").addResourceLocations("file:" + localFileDir);}

注意,此处的addResourceHandler是添加的我们访问时的路径,addResourceLocations添加的是本地文件路径,如果使用本地路径必须要加file:

3、查看效果

我们在D:/file/目录中存放一个aaa.jpg的文件,访问localhost:8080/data/aaa.jpg就可以获取到这张图片了!

二、文件上传

@RestController
public class Controller {@Value("${local.file.dir}")private String localFileDir;@Value("${local.file.path}")private String localFilePath;@PostMapping("/upload")public Map<String, String> uploadFile(@RequestParam("file") MultipartFile file){Map<String, String> resultMap = new HashMap<>();//获取上传文件的原始文件名String fileName = file.getOriginalFilename();if(StringUtils.isBlank(fileName) || !fileName.contains(".")) {throw new RuntimeException("文件名有误!");}// uuid生成文件String fileLastName = fileName.substring(fileName.lastIndexOf('.'));String localFileName = UUID.randomUUID() + fileLastName;//保存文件FileUtils.saveFile(file, localFileDir + localFileName);// 拼文件名resultMap.put("url", localFilePath + "/" + localFileName);return resultMap;}
}

调用文件上传时,会返回一个文件的url:/data/aaa.jpg,此时再拼上域名就可以访问该文件了!

相关文章:

Springboot项目实现简单的文件服务器,实现文件上传+图片及文件回显

文章目录 写在前面一、配置1、application.properties2、webMvc配置3、查看效果 二、文件上传 写在前面 平常工作中的项目&#xff0c;上传的文件一般都会传到对象存储云服务中。当接手一个小项目&#xff0c;如何自己动手搭建一个文件服务器&#xff0c;实现图片、文件的回显…...

5V低压步进电机驱动芯片GC6150,应用于摄像机,机器人 医疗器械等产品中。具有低噪声、低振动的特点

GC6150是双通道5V低压步进电机驱动器&#xff0c;具有低噪声、低振动的特点&#xff0c;特别适用于相机变焦对焦系统、万向架、摇头机等精度、低噪声STM控制系统&#xff0c;该芯片为每个通道集成了一个256微步的驱动器。通过SPI & T2C接口&#xff0c;客户可以方使地调整驱…...

3D Web轻量引擎HOOPS Communicator如何实现对大模型的渲染支持?

除了读取轻松外&#xff0c;HOOPS Communicator对超大模型的支持效果也非常好&#xff0c;它可以支持30GB的包含70万个零件和3.5亿个三角面的Catia装配模型&#xff01; 那么它是如何来实现对大模型的支持呢&#xff1f; 我们将从以下几个方面与大家分享&#xff1a;最低帧率…...

『 Linux 』进程地址空间概念

文章目录 &#x1fad9; 前言&#x1fad9; 进程地址空间是什么&#x1fad9; 写时拷贝&#x1fad9; 可执行程序中的虚拟地址&#x1fad9; 物理地址分布方式 &#x1fad9; 前言 在c/C中存在一种内存的概念; 一般来说一个内存的空间分布包括栈区,堆区,代码段等等; 且内存是…...

PySpark大数据处理详细教程

欢迎各位数据爱好者&#xff01;今天&#xff0c;我很高兴与您分享我的最新博客&#xff0c;专注于探索 PySpark DataFrame 的强大功能。无论您是刚入门的数据分析师&#xff0c;还是寻求深入了解大数据技术的专业人士&#xff0c;这里都有丰富的知识和实用的技巧等着您。让我们…...

三(五)ts非基础类型(对象)

在ts里面定义对象的方式也有很多。 普通定义 let obj1:{} {} // obj1.name fufu 报错&#xff0c;只能定义为空对象且不能修改 // 但是可以在赋初始值的时候直接添加属性&#xff0c;这是ts在类型推断时&#xff0c;它会宽容地匹配对象的结构。 let obj2:{} {name: fufu}…...

HeartBeat监控Redis状态

目录 一、概述 二、 安装部署 三、配置 四、启动服务 五、查看数据 一、概述 使用heartbeat可以实现在kibana界面对redis服务存活状态进行观察&#xff0c;如有必要&#xff0c;也可在服务宕机后立即向相关人员发送邮件通知 二、 安装部署 参照文章&#xff1a;HeartBeat监…...

FairGuard无缝兼容小米澎湃OS、ColorOS 14 、鸿蒙4!

随着移动互联网时代的发展&#xff0c;各大手机厂商为打造生态系统、构建自身的技术壁垒&#xff0c;纷纷投身自研操作系统。 而对于一款游戏安全产品&#xff0c;在不同操作系统下&#xff0c;是否能够无缝兼容并且提供稳定的、高强度的加密保护&#xff0c;成了行业的一大痛…...

【Copilot】Edge浏览器的copilot消失了怎么办

这种原因&#xff0c;可能是因为你的ip地址的不在这个服务的允许范围内。你需要重新使用之前出现copilot的ip地址&#xff0c;然后退出edge的账号&#xff0c;重新登录一遍&#xff0c;最后重启edge&#xff0c;就能够使得copilot侧边栏重新出现了。...

C++入门【6-C++ 修饰符类型】

C 修饰符类型 C 允许在 char、int 和 double 数据类型前放置修饰符。 修饰符是用于改变变量类型的行为的关键字&#xff0c;它更能满足各种情境的需求。 下面列出了数据类型修饰符&#xff1a; signed&#xff1a;表示变量可以存储负数。对于整型变量来说&#xff0c;signe…...

STP笔记总结

STP --- 生成树协议 STP&#xff08;Spanning Tree Protocol&#xff0c;生成树协议&#xff09;是根据 IEEE802.1D标准建立的&#xff0c;用于在局域网中消除数据链路层环路的协议。运行STP协议的设备通过彼此交互信息发现网络中的环路&#xff0c;并有选择地对某些端口进行阻…...

Qt开发 之 记一次安装 Qt5.12.12 安卓环境的失败案例

文章目录 1、安装Qt2、安卓开发的组合套件2.1、CSDN地址2.2、官网地址2.3、发现老方法不适用了 3、尝试用新方法解决3.1、先安装JDK&#xff0c;搞定JDK环境变量3.1.1、安装jdk3.1.2、确定jdk安装路径3.1.3、打开系统环境变量配置3.1.4、配置系统环境变量3.1.5、验证JDK环境变量…...

基于SpringBoot的就业信息管理系统设计与实现(源码+数据库+文档)

摘 要 在新冠肺炎疫情的影响下&#xff0c;大学生的就业问题已经变成了一个引起人们普遍重视的社会焦点问题。在这次疫情的冲击之下&#xff0c;大学生的就业市场的供求双方都受到了不同程度的影响&#xff0c;大学生的就业情况并不十分乐观。目前&#xff0c;各种招聘平台上…...

Java面试整理(四)Java IO流

我记得自己刚开始学Java的时候,都听过师兄的分享,说IO流是很重要,而且很难。 自己正式接触之后,其实IO流这块知识并不是特别难,而且随着IT的发展,IO流这块反而用得不是很多。特别是在应用开发这个层面,用得更少。 当然,可能会有朋友跳出来说“这怎么可能?你不懂Java吧…...

《安富莱嵌入式周报》第328期:自主微型机器人,火星探测器发射前失误故障分析,微软推出12周24期免费AI课程,炫酷3D LED点阵设计,MDK5.39发布

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程&#xff1a; 【实战技能】 单步运行源码分析&#xff0c;一期视频整明白FreeRTOS内核源码框架和运行…...

产品经理在项目周期中扮演的角色Axure的安装与基本使用

目录 一.项目周期流程 二.Axure是什么 三.Axure安装 3.1 一键式安装 3.2 汉化 3.3 授权登录 四.Axure的界面介绍及基本使用 4.1 菜单栏的使用 4.2 工具栏的使用 4.3 页面概要的使用及组件的使用 4.4 组件的样式设计 一.项目周期流程 在一般的项目周期中包含的工作内容有&…...

Dockerfile创建镜像介绍

1.介绍 Docker 提供了一种更便捷的方式&#xff0c;叫作 Dockerfile&#xff0c;docker build命令用于根据给定的Dockerfile构建Docker镜像。 docker build语法&#xff1a; # docker build [OPTIONS] <PATH | URL | -> 常用选项说明 --build-arg&#xff0c;设置构建时的…...

Android 滥用 SharedPreference 导致 ANR 问题

SharedPreference 是 Android 平台提供的一种轻量级的数据存储方式&#xff0c;它用于存储应用的配置信息或者一些简单的数据。SharedPreference 基于键值对的存储&#xff0c;并且支持基本的数据类型&#xff0c;如整型、字符串、布尔值等。它的使用非常简单方便&#xff0c;适…...

虚幻商城 道具汇总

文章目录 载具Vehicle Variety Pack(车辆品种包)Vehicle Variety Pack Volume 2(车辆品种包第 2 卷)家具Free Furniture Pack(免费家具包)Old West - VOL 1 - Interior Furniture(旧西部 - 第1卷 - 家具包)Old West VOL.3 - Travel Supplies and Goods(旧西部 - 第3卷…...

docker: Error response from daemon: failed to create shim task: OCI runtime

1 概述 在解决"Docker: Error response from daemon: failed to create shim task: OCI runtime"问题之前&#xff0c;我们先来了解一下Docker和OCI runtime的基本概念。 Docker是一个开源的应用容器引擎&#xff0c;可以帮助开发者将应用程序和其依赖打包到一个可…...

手把手教你用objdump和readelf破解ELF文件:从代码节修改到目标输出

深入解析ELF文件&#xff1a;从代码节定位到二进制修改实战 在Linux系统开发与逆向工程领域&#xff0c;理解ELF(Executable and Linkable Format)文件结构是每位开发者必备的核心技能。ELF作为Unix-like系统标准的可执行文件格式&#xff0c;承载着程序运行的完整信息架构。本…...

嵌入式串口通信效率优化实战

1. 串口通信效率优化背景在嵌入式系统开发中&#xff0c;串口通信是最基础也最常用的外设接口之一。我从事嵌入式开发十多年来&#xff0c;处理过各种串口通信场景&#xff0c;从简单的调试信息输出到复杂的工业控制协议传输。传统串口通信方式在简单场景下工作良好&#xff0c…...

HTML5从零到精通全攻略,一周内精通前端最基本框架

这是一篇为“什么都不懂的初学者”准备的HTML5超详细入门长文。请注意&#xff0c;文章较长&#xff0c;但结构清晰&#xff0c;配有大量简单例子和实战环节。我们遵循从概念到实践&#xff0c;从简单到复杂的路径。 ⚠️ 长文预警与学习指南 本文旨在用一周左右的时间&#x…...

GraphViz+CANdelaStudio实战:如何可视化你的State Diagram状态转换图

GraphVizCANdelaStudio实战&#xff1a;如何可视化你的State Diagram状态转换图 在汽车电子开发领域&#xff0c;状态机的设计和验证是核心工作之一。当你在CANdelaStudio中精心设计了复杂的状态转换逻辑后&#xff0c;如何让这些抽象的状态关系变得直观可理解&#xff1f;这就…...

BK1086/88 DSP收音机Arduino库详解

1. 项目概述PU2CLR BK108X 是一款专为 BEKEN BK1086 和 BK1088 高集成度数字信号处理&#xff08;DSP&#xff09;广播接收芯片设计的 Arduino 库。该库并非通用型通信封装&#xff0c;而是面向射频接收系统工程实践的底层控制框架&#xff0c;其核心价值在于将芯片复杂的寄存器…...

前端埋点技术实践:从方案选型到工程落地

前言 在数据驱动的时代&#xff0c;前端埋点是连接产品与用户的桥梁&#xff0c;它不仅是业务决策的数据基础&#xff0c;也是用户行为分析的入口。但对于很多前端开发者来说&#xff0c;埋点常常是一个“不愿面对却又无法逃避”的话题——看起来简单&#xff0c;做起来麻烦&a…...

快速原型:用快马ai一键生成openclaw在mac上的自动化安装脚本

最近在Mac上折腾OpenClaw这个开源工具时&#xff0c;发现它的安装过程对新手确实不太友好。作为一个经常需要快速验证工具可行性的开发者&#xff0c;我尝试用InsCode(快马)平台来生成自动化安装脚本&#xff0c;整个过程意外地顺畅。下面分享下我的实践心得&#xff1a; 环境检…...

【数据集】电力巡检场景下的绝缘子、鸟巢及防震锤图像数据集构建与应用

1. 电力巡检图像数据集的价值与应用场景 在电力系统运维中&#xff0c;无人机巡检已经成为主流手段。我参与过多个省级电网的智能化改造项目&#xff0c;发现传统人工巡检最大的痛点在于&#xff1a;巡检员需要盯着屏幕分析数小时的航拍视频&#xff0c;不仅容易疲劳漏检&#…...

NVIDIA Profile Inspector完整指南:解锁显卡隐藏性能的终极免费工具

NVIDIA Profile Inspector完整指南&#xff1a;解锁显卡隐藏性能的终极免费工具 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏卡顿、画面撕裂而烦恼吗&#xff1f;NVIDIA Profile Inspecto…...

MTK NV数据损坏 刷机、串号修复、串号修改 ,基带调试 工具教程

MTK 机型刷机工具 SP Flash Tool 最常用的 MTK 芯片刷机工具&#xff0c;支持通过 USB 线刷固件&#xff08;ROM&#xff09;。需下载与机型匹配的 Scatter 文件&#xff08;MTxxxx_Android_scatter.txt&#xff09;和固件包。操作时需进入设备的 BROM 模式&#xff08;通常通…...