栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot图片保存与读取

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot图片保存与读取

        参考大佬博客的链接:https://www.cnblogs.com/zimug/p/13474233.html

        SpringBoot版本:2.3.7.RELEASE 发布时间:2022年3月

介绍:

        在自己做一些小项目的时候遇到一个保存图片的问题,很明显,单独去买一个服务器保存图片划不着,而保存到数据库效率太低了。

网上查到的保存方法大多数分两种:

        一种是直接保存到项目路径下面,这样的话,一旦服务重新部署保存的图片直接就G了。

        另一种是保存到其他路径,这里介绍的就是保存到其他路径的方法。

分析:

        其实保存与读取关心的无非两点,保存路径与读取路径。

实现方式:

一、配置Static-location实现方式

学过SpringBoot web场景的应该都清楚spring.resources.static-location可以配置静态资源访问路径,这里我们就重写这个属性,在原本四个静态路径的基础上添加上一个保存图片的地址就好了。

static-location的配置:
web:
  upload-path: G:/images

spring:
  resources:
    static-locations: file:${web.upload-path},classpath:/meta-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

        upload-path就是保存图片的位置,在下面添加静态资源位置的时候,需要加上file:,告诉springboot这是文件中的路径。

接下来是Controller
@RestController
@Slf4j
public class FormTestController {
    //获取yaml中配置的上传路径属性
    @Value(("${web.upload-path}"))
    private String uploadPath;

    @PostMapping("/upload")
    public String upload(@RequestPart("file") MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();  //获取文件原名
        String visibleUri="/"+fileName;     //拼接访问图片的地址
        String saveUri=uploadPath+"/"+fileName;        //拼接保存图片的真实地址

        log.info("图片原文件名={} 图片访问地址={} 图片保存真实地址={}",fileName,visibleUri,saveUri);

        File saveFile = new File(saveUri);
        //判断是否存在文件夹,不存在就创建,但其实可以直接手动确定创建好,这样不用每次保存都检测
        if (!saveFile.exists()){
            saveFile.mkdirs();
        }
        try {
            file.transferTo(saveFile);  //保存文件到真实存储路径下
        } catch (IOException e) {
            e.printStackTrace();
        }

        return visibleUri;
    }

}
前端的body

这是首页
上传文件:

因为我们把保存图片的地址配置为了静态资源路径,所以/**就可以直接访问到其中的图片了。

使用效果:见文章下面的第三部分。

二、配置addResourceHandlers实现方式

        一个配置导入WebMvcConfigurer接口就可以成为web配置类,这个是springboot的常识。

        而其中的addResourceHandlers()是添加资源处理器的方法,其实上面的配置static-location本质上也是被这个方法处理的,这个可以自己查看源码。

        而我们在web配置类中重写这个方法也可以添加资源处理器。

这里将配置属性保存到application.properties中,没有其他原因,单纯因为刚才yaml用过了。

application.properties
thk.imagesRealPath=G:/images/ #真实保存地址
thk.imagesServerPath=/images #访问地址

上面两个地址的名字可以自己取

真实保存地址:就是你保存到那个盘下的那个文件夹,一定要注意文件夹的路径

访问地址:就是你访问这张图片时要加的前缀

config类
@Configuration
public class MyWebConfig implements WebMvcConfigurer  {
    //获取真实路径和访问路径
    @Value("${thk.imagesRealPath}")
    private String realPath;
    @Value("${thk.imagesServerPath}")
    private String serverPath;

    //添加文件服务器位置
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(new String[]{serverPath+"/**"}).addResourceLocations("file:/"+realPath);
}

        这种方式唯一可以说的优点是,你不用把那四个静态资源文件夹再写一遍……

Html的body部分

这是首页
上传文件:

我们配置了访问路径为images,所以就要加上它了。

三、static-location的使用效果: html

图片保存位置

上传图片

 上传成功

前端浏览

 如果还有疑问可以留言,也欢迎大佬交流!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/759390.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号