SpringBoot上传图片到本地并在线预览

news/2025/1/15 0:54:09/

SpringBoot上传图片到本地并实现URL预览


0.预期效果

项目上传的图片保存到本地磁盘上,返回给前端一个地址,前端根据该地址可以在浏览器上访问查看该图片(感觉和上传到服务器上没啥区别)

1.创建项目

创建个SpringBoot项目,勾选Web依赖,其它看着选选就行。

2.配置YML

配置如下:

server:port: 8080servlet:# 项目路径context-path: /bybspring:application:# 项目名称name: UploadImageApplicationservlet:multipart:# 单文件大小限制max-file-size: 10MB# 总上传大小限制max-request-size: 10MBupload:# 上传的图片保存路径(可自定义)path: E://upload//avatar//

3.上传Controller

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;@Slf4j
@RestController
@RequestMapping("/image")
public class ImageUploadController {@Value(value = "${upload.path}")private String uploadPath;/*** 上传图片并预览*/@RequestMapping(value = "/upload", method = RequestMethod.POST)public String uploadImage(@RequestParam(value = "file") MultipartFile multipartFile) {try {if (multipartFile.isEmpty()) {return "文件为空,请重新选择!";}// 上传的图片全部保存在 "E://upload//avatar//" 目录下File file = new File(uploadPath);if (!file.exists()) {// 创建完整的目录file.mkdirs();}// 获取文件原始名(包含后缀名)String orgName = multipartFile.getOriginalFilename();// 获取文件名(不包括后缀)String prefixName = orgName.substring(0, orgName.lastIndexOf("."));// 获取文件后缀名String suffixName = orgName.substring(orgName.lastIndexOf("."));// 这是处理后的新文件名String fileName;if(orgName.contains(".")) {// 示例:avatar.123.png,经过处理后得到:avatar.123_1661136943533.pngfileName = prefixName + "_" + System.currentTimeMillis() + suffixName;} else {// 上传的图片没有后缀(这压根就不算是一个正常的图片吧?)return "上传图片格式错误,请重新选择!";}String savePath = file.getPath() + File.separator + fileName;File saveFile = new File(savePath);// 将上传的文件复制到指定目录FileCopyUtils.copy(multipartFile.getBytes(), saveFile);// 返回给前端的图片保存路径;前台可以根据返回的路径拼接完整地址,即可在浏览器上预览该图片String path = "upload/avatar" + File.separator + fileName;if (path.contains("\\")) {path = path.replace("\\", "/");}return path;} catch (IOException e) {log.error(e.getMessage(), e);}return "";}
}

4.配置WebMvcConfigurer

这个类主要配置资源映射路径

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebAppConfigurer implements WebMvcConfigurer {/*** 静态资源的配置 - 使得可以从磁盘中读取 Html、图片、视频、音频等*/@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {/*配置server虚拟路径,handler为前台访问的URL目录,locations为files相对应的本地路径也就是说如果有一个 upload/avatar/aaa.png 请求,那程序会到后面的目录里面找aaa.png文件另外:如果项目中有使用Shiro,则还需要在Shiro里面配置过滤下*/registry.addResourceHandler("/upload/avatar/**").addResourceLocations("file:E:\\upload\\avatar\\");}
}

5.测试上传

  • 使用Postman或者Apifox,这里以Apifox为例:启动项目,配置好后点击发送即可
    上传图片

  • 返回的地址如下:
    返回地址

  • 浏览器上拼接出完整地址即可预览图片
    预览图片

6.总结

总体来说不太麻烦,如果创建个虚拟机,稍微改改还可以上传到虚拟机里面。就酱!


http://www.ppmy.cn/news/378382.html

相关文章

海边小岛

第二天,开车去大海里的一个岛屿之上,体会这岛屿与陆地不一样的感觉.午餐又是吃海鲜,青色的贝壳,花哈,螃蟹,皮皮虾等等,想起之前公司去黄山的时候吃的竹笋,野味,山里的野菜…

奶爸日记4 - 海边看轮船玩滑梯

1、看轮船 今天周末,一早起来,娃娃就跟我说,叫爸爸带她出去玩,她要去玩滑梯看轮船,中午我们在楼下快餐店吃完饭(普通的江苏菜),有鱼有肉有茄子有西蓝花有白菜有豆腐有萝卜汤。之后哄…

html图标动态移动效果图,html5特效-鼠标悬浮在图片上以及移动时的动画

这是一款鼠标悬浮在图片上以及鼠标在图片上移动时的动画,总共有8个特效,完整源码下载: http://pan.baidu.com/s/1pLLH3M7 密码: kvp5 效果预览 鼠标悬浮动画 部分js代码: (function() {var tiltSettings = [ {}, {movement: {imgWrapper : {translation : {x: 10, y: 10, z…

这几款图片格式转换器帮助你轻松解决图片转换难题

最近夏天又到了,相信很多小伙伴都想去海边吹吹海风、踩踩沙滩了吧?我已经去过了并且带上了相机,拍了很多好看的照片,但大部分相机输出的格式都是raw格式的,有时我们想对图片进行编辑就不太方便,因此&#x…

未来计算机设想图片,未来的设想作文8篇

未来的设想作文8篇 在平凡的学习、工作、生活中,大家总免不了要接触或使用作文吧,作文一定要做到主题集中,围绕同一主题作深入阐述,切忌东拉西扯,主题涣散甚至无主题。怎么写作文才能避免踩雷呢?以下是小编…

爬虫怎么根据一个关键词爬取上千张网络图片

本文的亮点是可以保存通过关键词搜索到的所有图片,而不只是第一页的图片。 由于公司做训练需要搜集一些图片,所以就开始打算用爬虫自动下载。刚开始是使用 【图文详解】python爬虫实战——5分钟做个图片自动下载器 - 简书 中的程序进行下载。但是感觉不…

PNG图片压缩原理解析

背景 今天凌晨一点,突然有个人加我的qq,一看竟然是十年前被我删掉的初恋。。。。 因为之前在qq空间有太多的互动,所以qq推荐好友里面经常推荐我俩互相认识。。。。谜之尴尬 同意好友申请以后,仔细看了她这十年间所有的qq动态和照片…

在markdown中直接插入base64编码的图片

经常写一些东西,但是一直被如何分享与迁移这些东西困扰,因为一迁移,格式就完全乱了。 markdown是一个不错的答案,以文字的方式表达格式,走到哪都没问题。但是还是不够完美,需要为图片搞个图床。 想到了一…