• SpirngBoot实现文件上传功能——文件上传原理——Postman接口测试


    Spring Boot实现文件上传功能

    在这里插入图片描述

    1. 文件上传到本地

    适用于单机项目;

    • Spring Boot工程嵌入的tomcat限制了请求的文件大小,每个文件的配置最大为1Mb,单次请求的文件的总数不能大于10Mb。
    • 要更改这个默认值需要在配置文件(如application.properties)中加入两个配置

    1.1 核心配置文件application.properties

    #单个文件的大小最大为10MB
    spring.servlet.multipart.max-file-size=10MB
    #单次请求所有文件的大小最大为10MB
    spring.servlet.multipart.max-request-size=10MB
    
    #tomcat运行所在的目录。 上传的文件可以直接http://localhost:8080/a.jpg  访问
    spring.web.resources.static-locations=classpath:/static/images
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.2 文件上传控制层FileController

    package com.guo.springboot.controller;
    
    import org.springframework.boot.system.ApplicationHome;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.util.UUID;
    
    @RestController
    public class FileController {
    
        private static final String UPLOADED_FOLDER = System.getProperty("user.dir")+"/upload";
    
        @PostMapping("/upload")
        public String upload(MultipartFile file){
            if (file.isEmpty()){
                return "图片上传失败!";
            }
            System.out.println("文件大小:" + (file.getSize()/1024) + "KB");
            String originalFilename = file.getOriginalFilename();
            String ext = "."+originalFilename.split("\\.")[1];  //获取文件的后缀.jpg
            String uuid = UUID.randomUUID().toString().replace("-","");
            String fileName = uuid + ext;
            //获取文件存放位置的绝对路径
            ApplicationHome applicationHome = new ApplicationHome(this.getClass());
            String pre = applicationHome.getDir().getParentFile().getParentFile().getAbsolutePath() +
                    "\\src\\main\\resources\\static\\images\\";
            String path = pre + fileName;
            return saveFile(file, path);
        }
    
        private String saveFile(MultipartFile file, String path) {
            try {
                //判断存储的目录是否存在,如果不存在则创建
                File dir = new File(path);
                if (!dir.exists()){
                    dir.mkdirs(); //创建多级目录
                }
                System.out.println("上传文件存储的绝对路径:" + path);
                file.transferTo(new File(path));  //把网络中上传的文件存储到路径当中
                return path;
            }catch (Exception e){
                System.out.println("上传失败!出现异常!!!" + e);
                return "上传失败,出现异常!";
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    1.3 用postman测试上传照片

    1.3.1 postman发起请求

    在这里插入图片描述

    1.3.2 程序控制台打印输出
    文件大小:784KB
    上传文件存储的绝对路径:D:\SpringBoot\git\day1\05-springboot-file\src\main\resources\static\images\0115b949e6cb4b9bb7c97997cdb3faf3.png
    
    • 1
    • 2
    1.3.3 根据打印的动态地址去本地磁盘查询

    在这里插入图片描述

    1.3.4 通过浏览器访问路径去查看

    在这里插入图片描述

    2. OSS对象存储

    适用于分布式 ,

    阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。

    2.1 引入相关依赖

    <!--OSS对象存储相关依赖-->
    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.15.0</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.3</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.2 创建工具类

    UploadUtil.java

    package com.guo.springboot.utils;
    
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import org.apache.commons.io.FilenameUtils;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.IOException;
    import java.util.UUID;
    
    public class UploadUtil {
        //阿里域名
        public static final String ALI_DOMAIN = "https://grh-test.oss-cn-hangzhou.aliyuncs.com/";
    
        public static String uploadImage(MultipartFile file) throws IOException {
            //生成文件名
            String originalFilename = file.getOriginalFilename(); //原来的图片名
            String ext = "." + FilenameUtils.getExtension(originalFilename);
            String uuid = UUID.randomUUID().toString().replace("-", "");
            String fileName = uuid + ext;
            //地域节点
            String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    
            String accessKeyId = "LTAI5tA******iQL****"; //登录阿里云右上角头像点击后进入AccessKey 管理可以查询到
            String accessKeySecret = "Z1qx6KH9dT*******niS***1I";
            //OSS客户端对象
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            ossClient.putObject(
                    "grh-test", //仓库名
                    fileName, //文件名
                    file.getInputStream()
            );
            ossClient.shutdown();
            return ALI_DOMAIN + fileName;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    2.3 控制层

    FileController.java

    
    @PostMapping("/uploadOSS")
    public String uploadOSS(MultipartFile file){
        try {
            return uploadImage(file);
        } catch (IOException e) {
            System.out.println("异常!" + e);
        }
        return "异常!";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.4 Postman测试

    2.4.1 测试上传接口

    在这里插入图片描述

    2.4.2 通过接口返回的地址去访问,可以下载读取图片

    在这里插入图片描述

    2.5 去阿里云OSS对象存储管理界面查询统计信息

    在这里插入图片描述

  • 相关阅读:
    C++ 语言学习 day06 string , 异常
    GODIVA论文阅读
    大家常说的表空间到底是什么?究竟什么又是数据表呢?
    SpringSecurity自定义多Provider时提示No AuthenticationProvider问题的解决方案与原理(一)
    Java 日志技术
    java中实体自动转化日期类
    Python高频面试题——如何在字符串中删除指定字符,掌握strip()、replace()和re.sub ()正确使用方法!
    react-hooks的节流与闭包,以及useCallback的用处
    【USRP】软件无线电基础篇:无线电频谱和波段划分表
    Shell脚本之awk的用法
  • 原文地址:https://blog.csdn.net/qq_45896330/article/details/126602492