Docker部署Minio

Author Avatar
ciky 08月 23,2024
  • 在其它设备中阅读本文章
  • 点击生成二维码

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

image.png

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("下载成功");