博罗惠州网站建设湖北搜索引擎优化
minio介绍
官方解释:MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis或者MySQL。
使用
一般我们做一些文件上传,比如头像什么的要么存储在本地,要么上传到阿里或者腾讯什么的服务器中,而在本地的话占内存,在他们的服务器又优点小贵,这时我们就可以上传到自己的服务器中。
工具类封装
一般文件上传我们都是放在service了,所以这里也将具体代码放在service中进行实现
@Service
public class FileUploadServiceImpl implements FileUploadService {@Autowiredprivate MinioProperties minioProperties;/*** 头像文件上传* @param multipartFile* @return*/@Overridepublic String fileUpload(MultipartFile multipartFile) {try {// 创建一个Minio的客户端对象MinioClient minioClient = MinioClient.builder().endpoint(minioProperties.getEndpointUrl()).credentials(minioProperties.getAccessKey(), minioProperties.getSecreKey()).build();// 判断桶是否存在boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProperties.getBucketName()).build());if (!found) { // 如果不存在,那么此时就创建一个新的桶minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProperties.getBucketName()).build());} else { // 如果存在打印信息System.out.println("Bucket 'xyzx-bucket' already exists.");}// 设置存储对象名称String dateDir = DateUtil.format(new Date(), "yyyyMMdd");String uuid = UUID.randomUUID().toString().replace("-", "");//20230801/443e1e772bef482c95be28704bec58a901.jpgString fileName = dateDir+"/"+uuid+multipartFile.getOriginalFilename();System.out.println(fileName);PutObjectArgs putObjectArgs = PutObjectArgs.builder().bucket(minioProperties.getBucketName()).stream(multipartFile.getInputStream(), multipartFile.getSize(), -1).object(fileName).build();minioClient.putObject(putObjectArgs) ;return minioProperties.getEndpointUrl() + "/" + minioProperties.getBucketName() + "/" + fileName ;} catch (Exception e) {throw new RuntimeException(e);}}
}
MinioProperties 是一个配置类,用来实现读取配置文件的内容
@Data
@ConfigurationProperties(prefix = "xyzx.minio")
public class MinioProperties {private String endpointUrl;private String accessKey;private String secreKey;private String bucketName;
}
application.yaml
xyzx:minio:endpointUrl: http://127.0.0.1:9000 # 自己虚拟机地址accessKey: minio # 用户名secreKey: minio123 # 密码bucketName: xyzx-bucket # bucket名称
在文件上传接口中调用service即可,会返回一个对应的图片的url。