美文网首页
搭建minio,Java集成minio

搭建minio,Java集成minio

作者: 阿畅00000 | 来源:发表于2022-12-18 15:01 被阅读0次

    一、docker搭建minio

    1.搜索minio

    docker search minio
    

    2.拉取minio镜像

    docker pull docker.io/minio/minio
    

    3.创建挂载目录

    mkdir -p /kerwin/install/minio/config
    mkdir -p /kerwin/install/minio/data
    

    4.启动

    docker run -p 9000:9000 -p 9090:9090 \
         --net=host \
         --name minio \
         -d --restart=always \
         -e "MINIO_ACCESS_KEY=minioadmin" \
         -e "MINIO_SECRET_KEY=minioadmin" \
         -v /kerwin/install/minio/data:/data \
         -v /kerwin/install/minio/config:/root/.minio \
         minio/minio server \
         /data --console-address ":9090" -address ":9000"
    

    5.访问

    http://ip:9090
    

    6.创建Buckets:

    开启图片预览,不开启access policy,通过获取可过期的URL也能在线预览

    二、Java集成minio

    2.1 application.yml

    minio:
      endpoint: http://ip:9000
      accessKey: username
      secretKey: password
      bucketName: product
    

    2.2 pom.xml

     <dependency>
          <groupId>io.minio</groupId>
          <artifactId>minio</artifactId>
          <version>8.0.3</version>
     </dependency>
    

    2.3 MinioUtils.class

    import com.nightmare.study0429.entity.ObjectItem;
    import io.minio.*;
    import io.minio.errors.*;
    import io.minio.http.Method;
    import io.minio.messages.DeleteError;
    import io.minio.messages.DeleteObject;
    import io.minio.messages.Item;
    import org.apache.tomcat.util.http.fileupload.IOUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Component;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    import java.util.stream.Collectors;
    
    /**
     * @Author: WuChang
     * @Description:
     * @Date: Created in  2022-04-29 1:28 PM
     * @Modified By:
     */
    @Component
    public class MinioUtils {
    
        @Autowired
        private MinioClient minioClient;
    
        @Value("${minio.bucketName}")
        private String bucketName;
        /**
         * description: 判断bucket是否存在,不存在则创建
         *
         * @return: void
         */
        public void existBucket(String name) {
            try {
                boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(name).build());
                if (!exists) {
                    minioClient.makeBucket(MakeBucketArgs.builder().bucket(name).build());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 创建存储bucket
         * @param bucketName 存储bucket名称
         * @return Boolean
         */
        public Boolean makeBucket(String bucketName) {
            try {
                minioClient.makeBucket(MakeBucketArgs.builder()
                        .bucket(bucketName)
                        .build());
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
            return true;
        }
    
        /**
         * 删除存储bucket
         * @param bucketName 存储bucket名称
         * @return Boolean
         */
        public Boolean removeBucket(String bucketName) {
            try {
                minioClient.removeBucket(RemoveBucketArgs.builder()
                        .bucket(bucketName)
                        .build());
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
            return true;
        }
        /**
         * description: 上传文件
         * @param multipartFile
         * @return: java.lang.String
         */
        public List<String> upload(MultipartFile[] multipartFile) {
            List<String> names = new ArrayList<>(multipartFile.length);
            for (MultipartFile file : multipartFile) {
                String fileName = file.getOriginalFilename();
                String[] split = fileName.split("\\.");
                if (split.length > 1) {
                    fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1];
                } else {
                    fileName = fileName + System.currentTimeMillis();
                }
                InputStream in = null;
                try {
                    in = file.getInputStream();
                    minioClient.putObject(PutObjectArgs.builder()
                            .bucket(bucketName)
                            .object(fileName)
                            .stream(in, in.available(), -1)
                            .contentType(file.getContentType())
                            .build()
                    );
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (in != null) {
                        try {
                            in.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
                names.add(fileName);
            }
            return names;
        }
    
        /**
         * description: 下载文件
         * @param fileName
         * @return: org.springframework.http.ResponseEntity<byte [ ]>
         */
        public ResponseEntity<byte[]> download(String fileName) {
            ResponseEntity<byte[]> responseEntity = null;
            InputStream in = null;
            ByteArrayOutputStream out = null;
            try {
                in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
                out = new ByteArrayOutputStream();
                IOUtils.copy(in, out);
                //封装返回值
                byte[] bytes = out.toByteArray();
                HttpHeaders headers = new HttpHeaders();
                try {
                    headers.add("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                headers.setContentLength(bytes.length);
                headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
                headers.setAccessControlExposeHeaders(Arrays.asList("*"));
                responseEntity = new ResponseEntity<byte[]>(bytes, headers, HttpStatus.OK);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (in != null) {
                        try {
                            in.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (out != null) {
                        out.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return responseEntity;
        }
    
        /**
         * 查看文件对象
         * @param bucketName 存储bucket名称
         * @return 存储bucket内文件对象信息
         */
        public List<ObjectItem> listObjects(String bucketName) {
            Iterable<Result<Item>> results = minioClient.listObjects(
                    ListObjectsArgs.builder().bucket(bucketName).build());
            List<ObjectItem> objectItems = new ArrayList<>();
            try {
                for (Result<Item> result : results) {
                    Item item = result.get();
                    ObjectItem objectItem = new ObjectItem();
                    objectItem.setObjectName(item.objectName());
                    objectItem.setSize(item.size());
                    objectItems.add(objectItem);
                }
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
            return objectItems;
        }
    
        /**
         * 批量删除文件对象
         * @param bucketName 存储bucket名称
         * @param objects 对象名称集合
         */
        public Iterable<Result<DeleteError>> removeObjects(String bucketName, List<String> objects) {
            List<DeleteObject> dos = objects.stream().map(e -> new DeleteObject(e)).collect(Collectors.toList());
            Iterable<Result<DeleteError>> results = minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(bucketName).objects(dos).build());
            return results;
        }
    
        /**
         * @method: getPreviewFileUrl
         * @description: 获取带时间的过期链接
         * @author: WuChang
         * @date: 2022/12/19 2:36 PM
         */
        public  String getPreviewFileUrl(String bucketName, String fileName) {
            GetPresignedObjectUrlArgs build = GetPresignedObjectUrlArgs.builder()
                    .bucket(bucketName)
                    .object(fileName)
                    .method(Method.GET)
                    .expiry(30, TimeUnit.SECONDS)
                    .build();
            String objectUrl = null;
            try {
                objectUrl = minioClient.getPresignedObjectUrl(build);
            } catch (ErrorResponseException e) {
                e.printStackTrace();
            } catch (InsufficientDataException e) {
                e.printStackTrace();
            } catch (InternalException e) {
                e.printStackTrace();
            } catch (InvalidKeyException e) {
                e.printStackTrace();
            } catch (InvalidResponseException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (XmlParserException e) {
                e.printStackTrace();
            } catch (ServerException e) {
                e.printStackTrace();
            }
            return objectUrl;
        }
    }
    

    相关文章

      网友评论

          本文标题:搭建minio,Java集成minio

          本文链接:https://www.haomeiwen.com/subject/hxjeqdtx.html