springboot+minio+docker搭建文件存储服务

Minio 是什么

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

docker 下载Minio 镜像

1. 拉取镜像
docker pull minio/minio
2. 启动
docker run -p 9000:9000  --net=host --name minio -d --restart=always  -v /usr/src/docker/data/docker-minio:/data minio/minio server /data
3. 查看 minio 的秘钥
docker logs minio

在这里插入图片描述
访问liunx主机加端口:http://192.168.149.101:9000 跳转到minio web 页面,密码为 刚刚 docker logs minio 查询出来秘钥
在这里插入图片描述
创建一个令牌桶用于存放文件
在这里插入图片描述
在bucket name 输入令牌的名称 点击create bucker 就创建好一个令牌桶
在这里插入图片描述

springboot 整合 minio

导入依赖

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

编写配置文件

server.port=8081
minio.endpoint=http://192.168.149.101:9000
minio.accessKey=minioadmin
minio.secretKey=minioadmin
minio.bucketName=images

编写配置文件 实体类

@Component
@AllArgsConstructor
@Data
@ConfigurationProperties(prefix = "minio")
@NoArgsConstructor
public class MinioProperties {
    private String endpoint;
    /**
     * Access key就像用户ID,可以唯一标识你的账户
     */
    private String accessKey;
    /**
     * Secret key是你账户的密码
     */
    private String secretKey;

    /**
     * 文件桶的名称
     */
    private String bucketName;
}

编写minio 配置类

@Configuration
public class MinioConfig {

    @Autowired
    private MinioProperties properties;

    @Bean
    public MinioClient minioClient(){
        MinioClient minioClient = null;
        try {
            minioClient = new MinioClient(properties.getEndpoint(), properties.getAccessKey(), properties.getSecretKey());
        } catch (InvalidEndpointException | InvalidPortException e) {
            e.printStackTrace();
        }
        return minioClient;
    }
}

编写minio 工具类

@Component
public class MinioUtils {

    @Autowired
    private MinioProperties properties;

    @Autowired
    private MinioClient minioClient;



    public String upload(MultipartFile file){
        try {
            // 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象

            // 检查存储桶是否已经存在
            boolean isExist = minioClient.bucketExists(properties.getBucketName());
            if (!isExist) {
                // 创建一个名为test的存储桶,用于存储照片的zip文件。
                minioClient.makeBucket(properties.getBucketName());
            }
            InputStream inputStream = file.getInputStream();
            // 使用putObject上传一个文件到存储桶中。

            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");


            String time = System.currentTimeMillis()+".jpg";

            // 设置存储对象名称
            String objectName = sdf.format(new Date()) + "/" + time;


            minioClient.putObject(properties.getBucketName(), objectName, inputStream, new PutObjectOptions(inputStream.available(), -1));
            //关闭
            inputStream.close();
            return properties.getEndpoint()+"/"+properties.getBucketName()+"/"+objectName;

        } catch (MinioException | NoSuchAlgorithmException | IOException | InvalidKeyException  | java.security.InvalidKeyException e) {
            System.out.println("Error occurred: " + e);
            return "";
        }

    }

}

编写文件上传 controller

@RestController
public class FileController {

    @Autowired
    private MinioUtils minioUtils;


    @PostMapping(value = "/upload")
    public String upload(@RequestParam("file") MultipartFile file) {
        String upload = minioUtils.upload(file);
        return upload;
    }
}

使用 postman 上传文件
在这里插入图片描述
minio 控制台查看刚刚上传文件
在这里插入图片描述

设置image 令牌桶 文件可以被外部可访问

点击buckets 页面 Manage 按钮 进入令牌桶设置页面

在这里插入图片描述
设置访问规则,点击Access Rules 标签添加 访问规则,显示规则对方框
在这里插入图片描述
在对话框里面添加配置规则
在这里插入图片描述
在这里插入图片描述
可以通过htttp://{localhost}:{port}/{buckets}/文件名进行访问

<image src="http://192.168.149.101:9000/images/20220303/1646291359974.jpg"></image>

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Spring BootMinio的大文件上传并解压的功能,可以按照以下步骤进行操作: 1. 首先,在Spring Boot项目的pom.xml文件中引入Minio的依赖。可以使用以下代码将Minio的依赖添加到项目中: ``` <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.2.1</version> </dependency> ``` 2. 然后,将大文件分片并上传到Minio对象存储服务。可以按照以下步骤进行操作: - 将要上传的大文件进行分片处理,可以使用文件分片算法将大文件分成多个小块。 - 将分片后的文件依次上传到Minio对象存储服务,并指定一个临时文件名。 3. 分片上传完成后,将所有分片合并为一个完整的文件。可以按照以下步骤进行操作: - 从Minio中读取所有分片文件的流。 - 将分片流写入到一个临时文件中,以便后续解压。 4. 解压临时文件。可以按照以下步骤进行操作: - 使用合适的解压库或工具,对临时文件进行解压。 - 解压后的文件可以按需求进行进一步处理,例如再次上传到Minio或其他存储系统。 综上所述,要实现Spring BootMinio的大文件上传并解压功能,需要将文件分片并上传到Minio,然后将分片合并为完整文件,最后解压文件。这样可以实现大文件的上传和解压操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Spring boot + minio 分片上传](https://blog.csdn.net/XIAOTONGZHU/article/details/130346735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [SpringBoot 使用 Minio 进行文件存储](https://blog.csdn.net/qq_43692950/article/details/125961685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Windows常用软件压缩包,后端Java适用于springboot 2.6.x等高版本](https://download.csdn.net/download/m0_55710969/85062866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值