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);