Docker部署Minio
Minio
1. 部署Minio
(1) 拉取镜像
$ docker pull minio/minio
(2) 创建挂载目录
$ mkdir -p /mydata/minio/config
$ mkdir -p /mydata/minio/data
(3) 创建minio容器
docker run -d \
--name minio \
-p 9000:9000 \ #客户端api端口
-p 9001:9001 \ #服务端端口
--privileged=true \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
-v /usr/local/minion/data:/data \
-v /usr/local/minio/config:/root/.minio \
minio/minio server \
--console-address ":9000" \
--address ":9001" /data
2. 设置AccessKey
3. SDK
-
java版本的文档:https://docs.min.io/docs/java-client-quickstart-guide.html
-
maven依赖
<!--minio依赖--> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.4.3</version> </dependency> <!--okhttp依赖--> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.8.1</version> </dependency>
-
(1) 上传文件
MinioClient minioClient =
MinioClient.builder()
.endpoint("http://192.168.65.128:9001")
.credentials("ACCESS_KEY", "SECRET_KEY")
.build();
@Test
public void testUpload() throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
//上传文件
minioClient.uploadObject(UploadObjectArgs.builder()
.bucket("testbucket") //桶
.filename("D:\\c盘移动\\Develop\\PS\\宣传部\\计算机院徽.png") //指定本地的文件路径
//----------------------------------------------------------------------------------------
.object("计算机院徽.png") //对象名,在桶下存储该文件
.object("test/1.png") //对象名,放在子目录下
//----------------------------------------------------------------------------------------
.contentType("image/png") //设置媒体文件类型---->通过MediaType.class可以查询到
.build());
}
(2) simplemagic
- 通过扩展名得到媒体资源类型mimeType的工具类
<!--根据扩展名取mimetype-->
<dependency>
<groupId>com.j256.simplemagic</groupId>
<artifactId>simplemagic</artifactId>
<version>1.17</version>
</dependency>
//通过扩展名得到媒体资源类型mimeType
ContentInfo extensionMatch = ContentInfoUtil.findExtensionMatch(".png");
String mimeType = MediaType.APPLICATION_OCTET_STREAM_VALUE; //通用mimeType,字节流
if(extensionMatch!=null){
mimeType = extensionMatch.getMimeType();
}
(3) 删除文件
@Test
public void testDelete() throws Exception {
//删除文件
minioClient.removeObject(RemoveObjectArgs.builder()
.bucket("testbucket")
.object("计算机院徽.png")
.build());
}
(4) 查询文件
//查询文件,从minio中下载
@Test
public void testGetFile() throws Exception{
GetObjectArgs getObjectArgs = GetObjectArgs.builder()
.bucket("testbucket") //桶
.object("test/1.png") //对象名
.build();
//查询远程服务器获取到的一个流对象
FilterInputStream inputStream = minioClient.getObject(getObjectArgs);
//指定输出流
FileOutputStream outputStream = new FileOutputStream("D:\\c盘移动\\1.png");
//流拷贝
IOUtils.copy(inputStream,outputStream);
}
- 校验文件的完整性,对文件计算出md5值,比较原始文件的md5和目标文件的md5,一致则说明完整
//校验文件的完整性对文件的内容进行md5
FileInputStream fileInputStream1 = new FileInputStream(new File("D:\\develop\\upload\\1.mp4")); //本地要上传的文件
String source_md5 = DigestUtils.md5Hex(fileInputStream1); //通过DigestUtils.md5Hex得到md5
FileInputStream fileInputStream = new FileInputStream(new File("D:\\develop\\upload\\1a.mp4")); //从minio下载的文件
String local_md5 = DigestUtils.md5Hex(fileInputStream); //通过DigestUtils.md5Hex得到md5
if(source_md5.equals(local_md5)){
System.out.println("下载成功");