关于Java项目使用MinIo对象存储服务的解决方法

关于Java项目使用MinIO存储对象服务的解决方案

最近公司项目需要改造升级,将原先存储在数据库中的文件对象改为从文件服务器中获取,最终决定使用MinIO来存储业务中的文件,MinIO平台支持多个存储桶以及海量对象,这为数据备份和容灾提供了极大的便利。这种设计确保了系统具备卓越的可用性和稳定性,从而保障了业务连续性。其轻量级特性并不繁复,因此出现故障的几率极低,展示出卓越的稳定性。此外,MinIO的集群搭建过程简单易行,而且提供了一系列的SDK。总体来说,MinIO文件存储在各种场景下都能够提供高效、稳定、安全的数据存储服务。

这里来记一下具体使用方法。

  1. 第一步,先引入MinIo的依赖,这里以8.3.4版本为例。

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

    然后配置MinIo服务的地址,用户名密码,一般会写在配置文件yml

minio:
  url: http://localhost:8848
  accessKey: admin
  secretKey: admin
  1. MinIo的配置类,这里附带几个MinIo常用的判断文件是否存在以及上传获取的方法。这里的地址一般都是写在配置文件里,SpringBoot项目中可以使用@Value注解获取配置文件中的值。
@Slf4j
@Configuration
public class MinioUtils {

	@Value("${minio.url}")
	private String endpoint;

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

	@Value("${minio.secretKey}")
	private String secretKey;
	// 桶名
	private String bucketName = "testBucket";

	private static MinioClient minioClient;

	@Bean
	public MinioClient getMinioClient() {
		MinioClient minioClient = null;
		try {
			minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
		} catch (Exception e) {
			log.error("连接MinIO服务器异常:{}", e);
		}
		return minioClient;
	}

	@PostConstruct
	public void setMinioClient() {
		try {
			minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
		} catch (Exception e) {
			log.error("连接MinIO服务器异常:{}", e);
		}
	}

	/**
	 * 判断文件是否存在
	 *
	 * @param bucketName 存储桶
	 * @param objectName 对象
	 * @return true:存在
	 */
	public static boolean doesObjectExist(String bucketName, String objectName) {
		boolean exist = true;
		try {
			minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
		} catch (Exception e) {
			exist = false;
		}
		return exist;
	}

	/**
	 * 获取文件流
	 *
	 * @param bucketName bucket名称
	 * @param objectName 文件名称
	 * @return 二进制流
	 */
	public static InputStream getObject(String bucketName, String objectName) throws Exception {
		return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
	}


	/**
	 * 流式上传文件
	 * @param inputStream 流
	 * @param newFileName 文件名(这里可以包含路径用 / 拼接)
	 */
	public Map<String,Object> uploadInputStream(InputStream inputStream,String newFileName) throws Exception {
		Map<String,Object> map = new HashMap<String, Object>();

		try {
			minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(newFileName)
					.stream(inputStream, inputStream.available(), -1).build());
			//文件名称
			map.put("objectName", newFileName);
			//桶名称
			map.put("bucket", bucketName);
		} catch (Exception e) {
			map = null;
			log.error(e.getMessage(),e);
		}
		return map;
	}

}

大家在使用过程有什么问题可以评论或私信我啊,我会第一时间帮大家解答的!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java使用Minio存储文件可以通过Minio提供的Java SDK来实现。Minio是一个开源的分布式对象存储服务,可以用于存储和检索大量的数据,同时也支持并发上传、下载、合并、删除等操作。下面是一个使用Minio存储文件的示例代码: 1. 首先需要引入MinioJava SDK依赖: ``` <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>RELEASE.2021-06-17T22-56-34Z</version> </dependency> ``` 2. 创建Minio客户端并连接到Minio服务器: ``` String endpoint = "http://minio.example.com"; String accessKey = "ACCESS_KEY"; String secretKey = "SECRET_KEY"; MinioClient minioClient = new MinioClient.Builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); ``` 3. 创建一个存储桶(Bucket): ``` String bucketName = "java.minio.demo"; boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (!bucketExists) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } ``` 4. 上传文件到Minio服务器: ``` File file = new File("D:\DownUpLoadTempFiles\100元.jpg"); InputStream inputStream = new FileInputStream(file); String objectName = "100元.jpg"; minioClient.putObject(PutObjectArgs.builder() .bucket(bucketName) .object(objectName) .stream(inputStream, inputStream.available(), -1) .build()); ``` 5. 下载文件: ``` String objectName = "100元.jpg"; File file = new File("D:\DownUpLoadTempFiles\100元.jpg"); minioClient.downloadObject(DownloadObjectArgs.builder() .bucket(bucketName) .object(objectName) .filename(file.getAbsolutePath()) .build()); ``` 6. 删除文件: ``` String objectName = "100元.jpg"; minioClient.removeObject(RemoveObjectArgs.builder() .bucket(bucketName) .object(objectName) .build()); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值