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

<body>
<h1>这是首页</h1>
<form method="post" action="/upload" enctype="multipart/form-data">
    上传文件:<input type="file" name="file"><br>
    <input type="submit" value="提交">
</form>
<img src="/插画1.jpg">
<img src="/插画2.jpg">
<img src="/插画3.jpg">
<img src="/插画4.jpg">

</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部分

<body>
<h1>这是首页</h1>
<form method="post" action="/upload" enctype="multipart/form-data">
    上传文件:<input type="file" name="file"><br>
    <input type="submit" value="提交">
</form>
<img src="images/插画1.jpg">
<img src="images/插画2.jpg">
<img src="images/插画3.jpg">
<img src="images/插画4.jpg">

</body>

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

三、static-location的使用效果:

html

图片保存位置

上传图片

 上传成功

前端浏览

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

  • 10
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot项目中保存图片,你可以按照以下步骤进行操作: 1. 在你的Spring Boot项目中创建一个用于保存图片的目录。可以在`resources/static`目录下创建一个名为`images`的文件夹,用来存放图片文件。 2. 创建一个Controller来处理图片上传的请求。你可以使用`@RestController`注解来定义一个Controller,并使用`@PostMapping`注解来处理POST请求。 ```java import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; @RestController public class ImageController { @PostMapping("/upload") public String uploadImage(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return "上传失败,请选择文件"; } try { // 获取文件名 String fileName = file.getOriginalFilename(); // 指定文件存储路径 String filePath = "src/main/resources/static/images/"; // 创建目标文件对象 File dest = new File(filePath + fileName); // 将上传文件保存到目标文件中 file.transferTo(dest); return "上传成功"; } catch (IOException e) { e.printStackTrace(); return "上传失败"; } } } ``` 3. 在前端页面中添加一个文件上传表单。你可以使用HTML的`<form>`元素以及`<input type="file">`元素来实现文件上传功能。 ```html <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <button type="submit">上传</button> </form> ``` 请确保表单的`action`属性与Controller中的请求路径一致。 4. 运行你的Spring Boot应用,并访问前端页面。选择一个图片文件并点击上传按钮即可将图片保存到指定目录中。 这样,你就可以在Spring Boot项目中成功保存图片了。请注意,上述代码仅提供了一个简单的示例,你可以根据实际需求进行适当的修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值