Minio服务搭建与应用

发布时间 2023-10-16 19:27:36作者: ejiyuan

1,docker 创建服务

docker run -d  \
    --name minio \
    -p 9000:9000 \
    -p 9001:9001 \
    -v /data/minio:/bitnami/minio/data \
    --env MINIO_ROOT_USER="admin" \
    --env MINIO_ROOT_PASSWORD="admin123" \
    bitnami/minio:latest

这里需要设置挂在目录权限,否者会:Permission denied

chmod -R 777 /data/minio

2,登录到Minio

地址为:http://localhost:9001,账号密码为在docker 运行时设置的 admin admin123

3,创建Bucket

点击”Create a Bucket.“创建一个 bucket

4,设置匿名访问

设置所有文件均可匿名访问

 

5,创建 Access Key

access key 用于程序中 api访问 文件资源

 

6,java引入

(1) 引入 maven 仓依赖包

<!-- https://mvnrepository.com/artifact/io.minio/minio -->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.6</version>
</dependency>

 (2) 初始化客户端对象

MinioClient minioClient = MinioClient.builder()
        .endpoint("http://192.168.10.126:9000")
        .credentials("VLK7P6IDlgdN1ThcEzm3", "DhxI8IgP0ZLYYlZk9p5gJ6O2mU2iW5WbyqTQdXNl")
        .build();

 (3) MultipartFile文件对象上传

// 构造一个上传文件的路径
// MultipartFile file 文件流对象
String fileName = path + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) 
        + "/" + UUID.randomUUID() 
        + Objects.requireNonNull(file.getOriginalFilename()).substring(file.getOriginalFilename().lastIndexOf("."));
//构造上传文件对象
PutObjectArgs objectArgs = PutObjectArgs.builder().bucket("test").object(fileName)
        .stream(file.getInputStream(), file.getSize(), -1).contentType(file.getContentType()).build();
//文件名称相同会覆盖
//response 可以监听返回之
ObjectWriteResponse response = minioClient.putObject(objectArgs);

 (4) uploadObject本地文件上传

minioClient.uploadObject(
        UploadObjectArgs.builder()
    .bucket("my-bucketname")
    .object("start.sh")
    .filename("D:\\deploy\\service\\general-task\\start.sh")
    .build());

 (5) 删除文件

// 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
// url = http://192.168.10.126:9000/test/upload/20231016/7f7a3b05-25bf-432d-abfe-284cf75c8d1c.png
// String bucket = "test";
String filename = URI.create(url).getPath();
filename = filename.replace("/" + bucket, ""); // 移除掉路径中的 bucket
minioClient.removeObject(
        RemoveObjectArgs.builder().bucket(bucket).object(filename).build());
System.out.println("删除文件:" + url);