SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径

简介: SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径

前言:SpringBoot 图片存储存放  域名+图片路径访问  

 https://xxx.xxx.cn/uploadimage/202206165dc6fd50-3432-4a50-a5c4-14a55713993f.jpg

存储图片到数据库里 这里分两种方式

  • 将图片保存的路径存储到数据库(图片存放在服务器,服务器的图片路径存储在数据库)
  • 将图片以二进制数据流的形式直接写入数据库字段中(base64的形式)

配置application.properties:

MultipartFile是Spring上传文件的封装类,包含了文件的二进制流和文件属性等信息,在配置文件中也可对相关属性进行配置,基本的配置信息如下:

Spring Boot 2.0之后(注意Mb大小写不同)


spring.servlet.multipart.enabled=true #默认支持文件上传.

spring.servlet.multipart.file-size-threshold=0 #支持文件写入磁盘.

spring.servlet.multipart.location= # 上传文件的临时目录

spring.servlet.multipart.max-file-size=1Mb # 最大支持文件大小

spring.servlet.multipart.max-request-size=10Mb # 最大支持请求大小


最常用的是一下配置内容,限制文件上传大小,上传时超过大小会抛出异常:

spring.servlet.multipart.max-file-size=500MB # 最大支持文件大小
spring.servlet.multipart.max-request-size=500MB  # 最大支持请求大小

工具类如下:

import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
public class ImageUtil {
    //存放图片的绝对路径
    private final static String SAVE_IMAGE_PATH = "L:/UploadImage/";
    /**
     * 返回文件后缀
     * @param file
     * @return
     */
    public static String getImagePath(MultipartFile file) {
        String fileName = file.getOriginalFilename();//获取原文件名
        int index = fileName.indexOf(".");
        return fileName.substring(index, fileName.length());
    }
    /**
     * 保存图片
     * @param mfile
     * @param file
     * @return
     */
    public static boolean saveImage(MultipartFile mfile , File file) {
        //查看文件夹是否存在,不存在则创建
        if(!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        try {
            //使用此方法保存必须要绝对路径且文件夹必须已存在,否则报错
            mfile.transferTo(file);
            return true;
        } catch (IllegalStateException | IOException e) {
            e.printStackTrace();
        }
        return false;
    }
    /**
     * 新文件名
     * @param suffix
     * @return
     */
    public static String getNewFileName(String suffix) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String date = sdf.format(new Date());
        return date + UUID.randomUUID() + suffix;
    }
    /**
     * 返回图片保存地址
     * @param name
     * @return
     */
    public static String getNewImagePath(String name) {
        return SAVE_IMAGE_PATH+name;
    }
}

controller层:

package com.lt.crm.controller;
import com.lt.crm.common.util.ImageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
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.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/Image")
@Api(value = "图片", tags = "文件图片")
public class UploadController {
    @ApiResponses({@ApiResponse(code = 200, message = "上传成功"), @ApiResponse(code = 400, message = "上传失败"), @ApiResponse(code = 500, message = "服务器内部错误")})
    @RequestMapping(value = "/uploadimage", method = RequestMethod.POST)
    public Map<String, Object> addimage(@RequestParam("files") MultipartFile[] files) {
        Map<String, Object> map = new HashMap<>();
        List<String> list = new ArrayList<>();
        for (int i = 0; i < files.length; i++) {
            MultipartFile mfile = files[i];
            //获取文件后缀
            String suffixName = ImageUtil.getImagePath(mfile);
            //生成新文件名称
            String newFileName = ImageUtil.getNewFileName(suffixName);
            //保存文件
            File file = new File(ImageUtil.getNewImagePath(newFileName));
            boolean state = ImageUtil.saveImage(mfile, file);
            if (state) {
//                 list.add(ImageUtil.getNewImagePath(newFileName));
                //保存数据库的图片路径为  相对路径
                list.add("uploadimage/" + newFileName);
            }
        }
        map.put("imgList", list);
        return map;
    }
}

postman如何测试?

1. 选择Body>form-date>File6d087bcd897a4b96ab1d9ef360b2e4dc.png


2.  输入KEY 选择图片


image.png


3.本地找我们设置的图片路径(如果是部署tomcat服务器 找对应的地址, 一般都会放到webapps)

f8cdd86cefaf4ecbb4c33d3ab4b65129.png



目录
相关文章
|
6天前
|
SQL 监控 Java
在IDEA 、springboot中使用切面aop实现日志信息的记录到数据库
这篇文章介绍了如何在IDEA和Spring Boot中使用AOP技术实现日志信息的记录到数据库的详细步骤和代码示例。
在IDEA 、springboot中使用切面aop实现日志信息的记录到数据库
|
1月前
|
SQL Java 数据库
使用Spring Boot和Flyway进行数据库迁移
使用Spring Boot和Flyway进行数据库迁移
|
1天前
|
应用服务中间件 Docker 容器
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
这篇文章介绍了在Docker中安装Tomcat的过程,包括搜索Tomcat镜像、拉取镜像、目录挂载的准备、创建并挂载容器,以及如何进入容器和进行测试。文中还说明了如何将WAR包部署到Tomcat服务器并访问部署的应用。
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
|
5天前
|
SQL JavaScript 前端开发
vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)
这篇文章详细介绍了如何在Vue.js中使用分页组件展示从数据库查询出来的数据,包括前端Vue页面的表格和分页组件代码,以及后端SpringBoot的控制层和SQL查询语句。
vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)
|
1天前
|
存储 JavaScript 前端开发
Vue中实现图片上传,上传后的图片回显,存储图片到服务器 【使用对象存储OSS】
这篇文章介绍了在Vue中实现图片上传到阿里云OSS对象存储服务的完整流程,包括服务端签名直传的前提知识、后端设置、前端组件封装以及图片上传和回显的效果展示。
|
1天前
|
网络协议 Java 应用服务中间件
Tomcat源码分析 (一)----- 手撕Java Web服务器需要准备哪些工作
本文探讨了后端开发中Web服务器的重要性,特别是Tomcat框架的地位与作用。通过解析Tomcat的内部机制,文章引导读者理解其复杂性,并提出了一种实践方式——手工构建简易Web服务器,以此加深对Web服务器运作原理的认识。文章还详细介绍了HTTP协议的工作流程,包括请求与响应的具体格式,并通过Socket编程在Java中的应用实例,展示了客户端与服务器间的数据交换过程。最后,通过一个简单的Java Web服务器实现案例,说明了如何处理HTTP请求及响应,强调虽然构建基本的Web服务器相对直接,但诸如Tomcat这样的成熟框架提供了更为丰富和必要的功能。
|
1天前
|
JavaScript Java Maven
毕设项目&课程设计&毕设项目:springboot+vue实现的在线求职管理平台(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和Vue.js实现的在线求职平台。该平台采用了前后端分离的架构,使用Spring Boot作为后端服务
毕设项目&课程设计&毕设项目:springboot+vue实现的在线求职管理平台(含教程&源码&数据库数据)
|
4天前
|
前端开发 JavaScript Java
SpringBoot+Vue+token实现(表单+图片)上传、图片地址保存到数据库。上传图片保存位置自己定义、图片可以在前端回显(一))
这篇文章详细介绍了在SpringBoot+Vue项目中实现表单和图片上传的完整流程,包括前端上传、后端接口处理、数据库保存图片路径,以及前端图片回显的方法,同时探讨了图片资源映射、token验证、过滤器配置等相关问题。
|
4天前
|
前端开发 数据库
SpringBoot+Vue+token实现(表单+图片)上传、图片地址保存到数据库。上传图片保存位置到项目中的静态资源下、图片可以在前端回显(二))
这篇文章是关于如何在SpringBoot+Vue+token的环境下实现表单和图片上传的优化篇,主要改进是将图片保存位置从磁盘指定位置改为项目中的静态资源目录,使得图片资源可以跨环境访问,并在前端正确回显。
|
5天前
|
XML SQL JavaScript
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
这篇文章介绍了如何在Vue页面中结合SpringBoot、MyBatis、ElementUI和ECharts,实现从数据库获取数据并展示为图表的过程,包括前端和后端的代码实现以及遇到的问题和解决方法。
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作