MinIO使用,文件上传和下载

MinIO使用,文件上传和下载

中文文档:https://www.minio.org.cn/docs/minio/kubernetes/upstream/index.html

官网:https://min.io/

官网下载和安装:https://min.io/download#/kubernetes

安装

二进制文件安装

下载MinIO

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20231214185157.0.0-1.x86_64.rpm -O minio.rpm
sudo dnf install minio.rpm

启动MinIO

minio server ~/minio --console-address :9090

后台运行方式

nohup /www/minio/minio server --console-address :9090 /www/minio/data > /www/minio/data/minio.log 2>&1 &

默认账号密码为

用户名:minioadmin
密码:minioadmin

进入页面

在这里插入图片描述

docker安装

安装docker

如果本机有就不需要安装了

移出旧的docker

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

使用 yum 安装

# 安装依赖
sudo yum install -y yum-utils
# 配置阿里云镜像
sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker Engine

sudo yum install docker-ce docker-ce-cli containerd.io

启动docker

sudo systemctl enable docker
sudo systemctl start docker

如果想让里面镜像开机启动

docker run 指令中加入 --restart=always 
安装MinIo

拉去镜像

docker pull minio/minio

运行

#最近更新的命令
docker run -d \
  -p 9000:9000 \
  -p 9090:9090 \
  --name minio \
  -v /home/minio/data:/data \
  -e "MINIO_ROOT_USER=用户名" \
  -e "MINIO_ROOT_PASSWORD=密码" \
  minio/minio server /data --console-address ":9090"

之后访问9090端口;看到这个页面即为成功

在这里插入图片描述

页面展示

在这里插入图片描述

Java操作MinIO

创建SpringBoot项目,需要注意的是如果请求结束后想在浏览器中查看需要增加权限!!!

点击这个将其修改为公开

在这里插入图片描述

安装依赖

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>JAVAVERSION</version>
</dependency>

设置最大上传大小-SpringBoot中

最好设置下,防止测试时候文件过大无法上传

server.port=8888
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB

如何使用

创建MinioClient
// 创建连接对象
MinioClient minioClient = MinioClient.builder().endpoint(uploadUrl)
        .credentials("bunny", "02120212")
        .build();
判断桶是否存在
 boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
判断桶是否存在,如果不存在则创建桶
// 判断桶是否存在,如果不存在则创建桶
if (!found) {
   
    minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
} else {
   
    System.out.println("桶已存在");
}
文件上传

其中contentType可以不填写,这个是指文件类型

// 文件上传
minioClient.putObject(PutObjectArgs.builder().bucket(bucketName)
    .object(fileName)// 这里是文件名称
    .stream(file.getInputStream(), file.getSize(), -1)// 文件内容,文件大小
    // .contentType("video/mp4")// 文件的类型,可以不填写
    .build());
返回访问路径
// 返回路径名称---访问时用
return uploadUrl + "/" + bucketName + "/" + fileName;

在方法中注意使用try catch

实际操作

Controller中

设置请求路径,我这里是post请求

@Tag(name = "上传文件")
@RestController
public class UploadFileController {
   
    @Autowired
    private UploadFIleService uploadFIleService;

    @Operation(summary = "Upload")
    @PostMapping("/uploadFile")
    public String uploadFile(@RequestParam("file") MultipartFile multipartFile) {
   
        return uploadFIleService.uploadFIle(multipartFile);
    }
}
Service中

创建接口和实现类

在这里插入图片描述

接口

package com.example.minio.service;


import org.springframework.web.multipart.MultipartFile;

public interface UploadFIleService {
   
    String uploadFIle(MultipartFile file);
}

实现类

package com.example.minio.service.impl;

import com.example.minio.service.UploadFIleService;
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

@Service
public class UploadFIleServiceImpl implements UploadFIleService {
   
    @Override
    public String uploadFIle(MultipartFile file) {
   
        String uploadUrl = "http://192.168.31.140:9000";// 上传路径地址
        String bucketName = "bunny-test";// 桶的名称
        String fileName = file.getOriginalFilename();// 文件名称

        try {
   
            // 创建连接对象
            MinioClient minioClient = MinioClient.builder().endpoint(uploadUrl)
                    .credentials("bunny", "02120212")
                    .build();

            // 判断桶是否存在
            boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());

            // 判断桶是否存在,如果不存在则创建桶
            if (!found) {
   
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            } else {
   
                System.out.println("桶已存在");
            }

            // 文件上传
            minioClient.putObject(PutObjectArgs.builder().bucket(bucketName)
                    .object(fileName)// 这里是文件名称
                    .stream(file.getInputStream(), file.getSize(), -1)// 文件内容,文件大小
                    // .contentType("video/mp4")// 文件的类型,可以不填写
                    .build());

            // 返回路径名称---访问时用
            return uploadUrl + "/" + bucketName + "/" + fileName;
        } catch (Exception e) {
   
            throw new RuntimeException(e);
        }

    }
}

测试请求

需要注意的是如果请求结束后想在浏览器中查看需要增加权限!!!

点击这个将其修改为公开

在这里插入图片描述

之后访问服务器

在这里插入图片描述

文件中已包含,这个桶没有创建,但是不存在自动创建了一个

在这里插入图片描述

可以访问

     throw new RuntimeException(e);
    }

}

}


## 测试请求 

需要注意的是如果请求结束后想在浏览器中查看需要增加权限!!!

点击这个将其修改为公开

[外链图片转存中...(img-nequIWuJ-1702822622971)]

之后访问服务器

[外链图片转存中...(img-0Zie22dn-1702822622971)]

文件中已包含,这个桶没有创建,但是不存在自动创建了一个

[外链图片转存中...(img-aegMV599-1702822622971)]

可以访问

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/069326d2bb7142ee8861f8a66ab8f3cc.png)

相关推荐

  1. C#使用ftp进行文件下载功能

    2023-12-18 02:52:04       10 阅读
  2. SpringMVC之文件下载

    2023-12-18 02:52:04       46 阅读
  3. 文件下载

    2023-12-18 02:52:04       17 阅读
  4. SpringMVC11、文件下载

    2023-12-18 02:52:04       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-18 02:52:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-18 02:52:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-18 02:52:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-18 02:52:04       18 阅读

热门阅读

  1. arcgis图层样式应用geoserver问题

    2023-12-18 02:52:04       44 阅读
  2. unknown error 1146

    2023-12-18 02:52:04       37 阅读
  3. Mysql(事务)

    2023-12-18 02:52:04       52 阅读
  4. 什么是容器编排?

    2023-12-18 02:52:04       48 阅读
  5. 【无标题】

    2023-12-18 02:52:04       40 阅读
  6. 【前端学习记录】Vuex状态管理学习笔记

    2023-12-18 02:52:04       41 阅读
  7. LeetCode27.移除数组元素

    2023-12-18 02:52:04       46 阅读
  8. 骑砍战团MOD开发(19)-ID掩码算法

    2023-12-18 02:52:04       36 阅读
  9. Ubuntu20.04 配置NTP服务器

    2023-12-18 02:52:04       34 阅读
  10. LeetCode 1. 两数之和

    2023-12-18 02:52:04       58 阅读