Java项目使用MINIO管理文件

Java项目使用MINIO管理文件

一、在Linux下载安装MINIO

1、此处使用的是先将MINIO压缩包下载到本地,用xshell连接到虚拟机,再cd到打算安装MINIO的目录下,用xftp将本地解压完的MINIO上传到该目录
在这里插入图片描述
2、进入MINIO目录,使用chmod -x minio 给文件与目录执行权限
在这里插入图片描述
3、指定端口启动

./minio server --address '127.0.0.1:9002' --console-address '127.0.0.1:9001' /home/minio/data &

在这里插入图片描述

代码实现使用MINIO管理文件

1、pom文件中导入依赖包

<!--MINIO-->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.3.4</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.3</version>
        </dependency>

在这里插入图片描述
2、配置文件参数
避雷:此处端口为API端口,我第一次写成了console端口报错
minio: url: http://127.0.0.1:9002/ accessKey: minioadmin secretKey: minioadmin bucket: develop在这里插入图片描述
3、CRUD业务代码实现

@Service
public class MinIOFileManagement {

    @Value("${minio.url}")
    private String url;
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secretKey}")
    private String secretKey;
    @Value("${minio.bucket}")
    private String bucket;

    private MinioClient minioClient;

    @PostConstruct
    private void init() {
        try {
            minioClient = MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
            if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build())) {
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());
            }
        } catch (Exception ignore) {
                        e.printStackTrace();
        }
    }

   
//    ----------------------------------存储------------------------------------------------
    public void storage(String directoryPath, MultipartFile multipartFile) {
        try {
            minioClient.putObject(PutObjectArgs.builder().bucket(bucket)
                    .object(directoryPath + File.separator + multipartFile.getOriginalFilename())
                    .contentType(multipartFile.getContentType())
                    .stream(multipartFile.getInputStream(), multipartFile.getSize(), -1).build());
        } catch (Exception e) {
            LOGGER.info("exception:" + e);
        }
    }

    public void deleteDirectory(String directoryPath) {
        List<String> fileList = listFileName(directoryPath);
        if (DataStructureUtils.isValid(fileList)) {
            try {
                for (String fileName : fileList) {
                    minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucket)
                            .object(fileName).build());
                }
            } catch (Exception e) {
                LOGGER.info("exception:" + e);
            }
        }
    }

    public void updateDirectory(String directoryPath, MultipartFile multipartFile) {
        deleteDirectory(directoryPath);
        storage(directoryPath, multipartFile);
    }

    public String getAccessUrl(String fileName) {
        String result = null;
        try {
            result = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
                    .bucket(bucket).method(Method.GET).object(fileName).build());
        } catch (Exception e) {
            LOGGER.info("exception:" + e);
        }
        return result;
    }

    public List<String> listFileName(String directoryPath) {
        List<String> result = new ArrayList<>();
        try {
            for (Result<Item> next : minioClient.listObjects(ListObjectsArgs.builder()
                    .bucket(bucket).prefix(directoryPath).build())) {
                result.add(next.get().objectName());
            }
        } catch (Exception e) {
            LOGGER.info("exception:" + e);
        }
        return result;
    }


    public List<LocalFile> listFileInfo(String directoryPath) {
        return listFileName(directoryPath).stream().map(e -> {
            String fileNameDesc = e;
            if (e.contains(File.separator)) {
                String separator = "/|\\\\";
                String[] pathPart = e.split(separator);
                fileNameDesc = pathPart[pathPart.length - 1];
            }
            return new LocalFile(e, fileNameDesc, getAccessUrl(e));
        }).collect(Collectors.toList());
    }
}

4、写个单元测试

@SpringBootTest(classes = StartApp.class)
@RunWith(SpringRunner.class)
public class TestMin {
	
	@Autowired
    private MinIOFileManagement  minIOFileManagement ;

	@Test
    public void test() throws IOException {
        File file = new File("D:\\data_doc\\test.xls");
        Long id = 1L;

        FileInputStream fileInputStream = new FileInputStream(file);
        MultipartFile multipartFile = new MockMultipartFile(file.getName(), file.getName(),
                "application/sql", fileInputStream);

        String directoryPath = ModuleTypeEnum.TEST_MODULE.name() + File.separator + "TEST_FILE_" + id;
        minIOFileManagement.storage(directoryPath, multipartFile);
        List<LocalFile> listFileInfo = minIOFileManagement.listFileInfo(directoryPath);
    }
}


版权声明:本文为qq_43570799原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。