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

SpringBoot实现图片文件上传和回显的两种方式

目录

一 功能需求

二 上传本地

        2.1 实现文件上传的controller层

2.2 图片访问资源映射

二 上传OSS 


一 功能需求

        实现图片的上传和回显功能其实在业务中是非常常见的,比如需要上传头像,或者交易平台需要上传物品的图片等等,都需要上传和回显,所以我接下来给大家介绍两种实现照片上传和回显的方式,一种是上传本地,一种是上传OSS。

二 上传本地

        因为本项目是基于springboot的前后端分离项目,所以相关依赖已经导入,所以这里导入相关依赖的步骤就不再做多介绍了。

        2.1 实现文件上传的controller层

        ① 接收文件的参数 

         MultipartFile file:前端会把图片暂时存储在这个参数里面,而且需要注意,参数名file不能随便写,要和前端的name对应。

        ② 为文件重新生成文件名

因为有可能用户上传的图片名字会重复,这样会覆盖掉原来的图片,所以需要用uuid生成一个唯一名的图片名。

//        获取文件名String filename = file.getOriginalFilename();
//        获取文件后缀String substring = filename.substring(filename.lastIndexOf("."));
//        uuid重新生成不重复的新的文件名filename= UUID.randomUUID()+substring;

③ 设置文件上传的本地路径

这里上传的本地路径是项目的静态资源下的目录。

ApplicationHome applicationHome = new ApplicationHome(this.getClass());String pre = applicationHome.getDir().getParentFile().getParentFile().getAbsolutePath() +"\\src\\main\\resources\\static\\images\\";

③ 上传图片

 String savePath = pre+filename ;file.transferTo(new File(savePath));

 这里直接调用transferTo方法即可。

④ 返回图片访问的路径

 return Result.success("/image/"+filename);

 这个路径是我们的访问路径,返回给前端,由前端访问这个路径进行回显图片.

controller整体代码如下:

@RestController
@RequestMapping("/admin/common")
@Slf4j
public class FileUpload {@PostMapping("/upload")public Result<String> fileUpload(@RequestParam("file") MultipartFile file){log.info("进入文件上传,文件为:{}",file);
//        获取文件名String filename = file.getOriginalFilename();
//        获取文件后缀String substring = filename.substring(filename.lastIndexOf("."));
//        uuid重新生成不重复的新的文件名filename= UUID.randomUUID()+substring;
//        获取服务器路径//        保存文件到本地try {ApplicationHome applicationHome = new ApplicationHome(this.getClass());String pre = applicationHome.getDir().getParentFile().getParentFile().getAbsolutePath() +"\\src\\main\\resources\\static\\images\\";String savePath = pre+filename ;file.transferTo(new File(savePath));return Result.success("/image/"+filename);} catch (IOException e) {throw new RuntimeException(e);}}
}

2.2 图片访问资源映射

上面返回给前端的访问路径可以看出,其实我们返回的路径并不是图片存放在我们本地的路径,如果直接访问是访问不了的,所以需要我们加上一个资源映射,就是访问的这个路径映射到图片的存放路径。

@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {/*** 设置静态资源映射* @param registry*/
//        访问图片的资源映射registry.addResourceHandler("/image/**").addResourceLocations("file:D:\\feisi\\cangQiong\\sky-take-out\\sky-server\\src\\main\\resources\\static\\images\\");}}

前面是你的访问路径,后面是你图片文件的存放路径。

可能有人会问,为什么不直接给前端返回图片存放路径,让前端直接访问图片,而是要搞一个映射呢?因为服务器有保护机制,不能直接访问计算机的本地路径的资源。

第一种上传本地的方式已经介绍完了,接下来再介绍第二种方式... 

二 上传OSS 

http://www.lryc.cn/news/365027.html

相关文章:

  • 进程和计划任务以及步骤
  • 使用Python实现深度学习模型:序列到序列模型(Seq2Seq)
  • 力扣283. 移动零
  • 二叉树的顺序结构(堆的实现)
  • 2024大模型如何学习【附学习资料】
  • 计算机组成原理·考点知识点整理
  • python-datetime模块时间戳常用方法汇总
  • 【Python报错】已解决ModuleNotFoundError: No module named ‘timm’
  • 【设计模式】适配器模式(结构型)⭐⭐⭐
  • 云原生周刊:Gateway API v1.1 发布 | 2024.6.3
  • KotlinConf 2024:深入了解Kotlin Multiplatform (KMP)
  • 探索ChatGPT-4在解决化学知识问题上的研究与应用
  • 性能狂飙:SpringBoot应用优化实战手册
  • Github上一款开源、简洁、强大的任务管理工具:Condution
  • LeetCode-2938. 区分黑球与白球【贪心 双指针 字符串】
  • 深度神经网络——什么是扩散模型?
  • 有代码冗余的检查工具嘛
  • 3D培训大师:快速输出标准3D课件,打造沉浸式培训体验
  • Python接口自动化测试:Json 数据处理实战
  • Java概述 , Java环境安装 , 第一个Hello World
  • 查看Linux端口占用和开启端口命令
  • 24-unittest简介
  • Kotlin 中,扩展函数(Extension Functions)
  • 堪称2024最强的前端面试场景题,让419人成功拿到offer
  • 使用node将页面转为pdf?(puppeteer实现)
  • 龙迅#LT8711H支持TYPE-C/DP/EDP转HDMI功能应用,分辨率支持 1080p@60Hz,芯片内置固件!
  • WPF中Ignorable
  • 系统安全及应用11
  • vue中SKU实现
  • 闭眼推荐的,新手教师工具