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版权协议,转载请附上原文出处链接和本声明。