【SpringBoot】Minio——文件上传与下载

目录结构

  • 下载和启动Minio
  • SpringBoot测试文件上传
  • 总结
  • 扩展

下载和启动Minio

minio下载地址

下载安装

【SpringBoot】Minio——文件上传与下载_第1张图片
【SpringBoot】Minio——文件上传与下载_第2张图片

新建一个文件夹,把下载的文件拖过来,并新建一个data目录

【SpringBoot】Minio——文件上传与下载_第3张图片

进入cmd运行下面命令

【SpringBoot】Minio——文件上传与下载_第4张图片

出现下面的情况就是配置好了,可以访问本地网站进入

【SpringBoot】Minio——文件上传与下载_第5张图片

【SpringBoot】Minio——文件上传与下载_第6张图片

我们的minio就安装配置好了,我们接下来创建一个bucket存储我们的图片

【SpringBoot】Minio——文件上传与下载_第7张图片

【SpringBoot】Minio——文件上传与下载_第8张图片
【SpringBoot】Minio——文件上传与下载_第9张图片
【SpringBoot】Minio——文件上传与下载_第10张图片
【SpringBoot】Minio——文件上传与下载_第11张图片

到这里我们的minio的环境就都配置好了
然后我们进入idea,使用SpringBoot开发接口测试

SpringBoot测试文件上传

新建一个SpringBoot项目,并引入web依赖
建立一个controller包,准备编写UploadController接口
再建立一个utils包,准备编写UploadUtil类,准备工作做好后我们开始编写接口
我先给一个整体架构图

【SpringBoot】Minio——文件上传与下载_第12张图片

1.导入maven依赖

<dependency>
    <groupId>io.miniogroupId>
    <artifactId>minioartifactId>
    <version>8.5.3version>
dependency>

2.编写uploadUtil类,这里只是一个工具类,代码如下,如果能看懂是最好
这里需要修改下面的四个变量,修改为自己的

@Component  //声明为一个bean
public class UploadUtil {

    //这里需要改为自己的

    private String endpoint = "http://localhost:9000";
    private String accessKey = "minioadmin";
    private String secretKey = "minioadmin";
    private String bucket = "test";


    public  String upload(String filename, Long size, InputStream in) throws Exception {  //filename:文件名  size:文件大小  //in:输入流
        String url = "";
        try {
            // 创建客户端连接
            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint(endpoint)
                            .credentials(accessKey, secretKey )
                            .build();

            // 查看bucket是否存在,不存在则创建
            boolean found =
                    minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build());
            if (!found) {
                // Make a new bucket called 'asiatrip'.
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());
            } else {
                System.out.println("Bucket 'asiatrip' already exists.");
            }

            //文件名需要在url里拼接返回去

            url = endpoint + "/" + bucket + "/" + filename;

            // 上传数据流
            minioClient.putObject(
                    PutObjectArgs.builder().bucket(bucket).object(filename)  //filename
                            .stream(in, size, -1)   //传入的参数在这里使用
                            .build());
        } catch (MinioException e) {
            System.out.println("Error occurred: " + e);
            System.out.println("HTTP trace: " + e.httpTrace());
        }
        return url;
    }
}

3.编写UploadController类
因为我们写的工具类需要传入3个参数,file里面有很多方法可以让我们得到这些参数,十分方便

@RestController
public class UploadController {

    @Autowired
    private UploadUtil uploadUtil;
    

    @PostMapping("/upload")
    public String upload(MultipartFile file) throws Exception {
        String filename = file.getOriginalFilename();
        long size = file.getSize();
        InputStream in = file.getInputStream();

        //为了避免文件名重复而覆盖,需要修改文件名
        filename = UUID.randomUUID().toString()+filename.substring(filename.lastIndexOf("."));

        String url = uploadUtil.upload(filename, size, in);

        return url;
    }
}

我这里使用postman工具测试

【SpringBoot】Minio——文件上传与下载_第13张图片

开启项目后选择图片提交,我这里选择的图片是一个小猫

【SpringBoot】Minio——文件上传与下载_第14张图片

点击send发送请求,可以看到给我们返回了url地址

【SpringBoot】Minio——文件上传与下载_第15张图片

然后我们进入minio里看看

【SpringBoot】Minio——文件上传与下载_第16张图片

minio里面已经有一张图片了,名字和返回给我们的url后面的名字一样,下载下来的话也会是那张小猫的图片

总结

本文我们学习了SpringBoot集成Minio实现文件上传与下载的功能,大家快去实践试试吧!

扩展

大家是否还记得我们学过读取yml文件里面的类容,我们在工具类里面写死的配置是否可以在yml文件里面配置在读取出来,如果要用到可以十分方便的更改,所以快去试试把~

你可能感兴趣的:(SpringBoot,spring,boot,java,后端)