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 {@Autowiredprivate 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 {@Overridepublic 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)