当前位置: 首页 > news >正文

Minio工具类封装

minio介绍

官方解释:MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis或者MySQL。

使用

一般我们做一些文件上传,比如头像什么的要么存储在本地,要么上传到阿里或者腾讯什么的服务器中,而在本地的话占内存,在他们的服务器又优点小贵,这时我们就可以上传到自己的服务器中。

工具类封装

 一般文件上传我们都是放在service了,所以这里也将具体代码放在service中进行实现

@Service
public class FileUploadServiceImpl implements FileUploadService {

    @Autowired
    private MinioProperties minioProperties;

    /**
     * 头像文件上传
     * @param multipartFile
     * @return
     */
    @Override
    public 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.jpg
            String 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。

http://www.dtcms.com/a/13478.html

相关文章:

  • Java 运算符(详细介绍)
  • C++-容器适配器- stack、queue、priority_queue和仿函数
  • 鸿蒙next系统如何进行测试APP安装
  • 人工智能时代,程序员如何保持核心竞争力?
  • 云手机哪款好用?2024年云手机推荐对比指南
  • 【计算机网络】网络相关技术介绍
  • springboot cache
  • Python精选200Tips:186-190
  • Android SystemUI组件(08)睡眠灭屏 锁屏处理流程
  • 基于MATLAB实现2ASK调制解调仿真(结果超详细)
  • 刷题 二叉树
  • 行盒的截断样式 box-decoration-break
  • 计算机网络思维导图
  • Python绘制--绘制心形曲线
  • 无人机之飞行算法篇
  • Linux dlsym和直接调用函数地址解析分析
  • 相机基础概念
  • 电源管理芯片PMIC
  • 网站集群批量管理-Ansible(playbook)
  • Hive数仓操作(七)
  • 昇思学习打卡营第31天|深度解密 CycleGAN 图像风格迁移:从草图到线稿的无缝转化
  • 考研笔记之操作系统(三)- 存储管理
  • 探索Spring Boot:教学资源大全
  • 国庆作业
  • RDD的介绍、RDD的特点、创建RDD数据
  • 序列化与反序列化基础及反序列化漏洞(附案例)
  • SQL第14课挑战题
  • 如何用python抓取豆瓣电影TOP250
  • linux系统不同用户登录vnc
  • 逼近理论及应用精解【12】