前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 工程集成 minio 对象存储

Spring Boot 工程集成 minio 对象存储

作者头像
Freedom123
发布2024-03-29 09:33:40
770
发布2024-03-29 09:33:40
举报
文章被收录于专栏:DevOpsDevOps

上一片博文里我们介绍了 minio 对象存储的部署,这篇博文 我们主要介绍下 基于minio和spring boot的工程开发

1. 构建Spring boot 工程

        选择依赖 web,lombok,devops 

2. 修改pom.xml 文件

代码语言:javascript
复制
<properties>
    <minio.version>4.0.0</minio.version>
</properties>
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>${minio.version}</version>
</dependency>

3. Minio 公共类

代码语言:javascript
复制
public class MinioUtil {
     private static String minio_url;
     private static String minio_name;
     private static String minio_pass;
      private static String minio_bucketName;
  
    /**
     * 
     * @Title: uploadImage
     * @Description:上传图片
     * @param inputStream
     * @param suffix
     * @return
     * @throws Exception
     */
    public static JSONObject uploadImage(InputStream inputStream, String suffix) throws Exception {
        return upload(inputStream, suffix, "image/jpeg");
    }
  
    /**
     * @Title: uploadVideo
     * @Description:上传视频
     * @param inputStream
     * @param suffix
     * @return
     * @throws Exception
     */
    public static JSONObject uploadVideo(InputStream inputStream, String suffix) throws Exception {
        return upload(inputStream, suffix, "video/mp4");
    }
 
     /**
     * @Title: uploadVideo
     * @Description:上传文件
     * @param inputStream
     * @param suffix
     * @return
     * @throws Exception
     */
    public static JSONObject uploadFile(InputStream inputStream, String suffix) throws Exception {
        return upload(inputStream, suffix, "application/octet-stream");
    }
  
    /**
     * 上传字符串大文本内容
     * 
     * @Title: uploadString
     * @Description:描述方法
     * @param str
     * @return
     * @throws Exception
     */
    public static JSONObject uploadString(String str) throws Exception {
        if (!StringUtils.notNullAndEmpty(str)) {
            return new JSONObject();
        }
        InputStream inputStream = new ByteArrayInputStream(str.getBytes());
        return upload(inputStream, null, "text/html");
    }
  
    /**
     * @Title: upload
     * @Description:上传主功能
     * @return
     * @throws Exception
     */
    private static JSONObject upload(InputStream inputStream, String suffix, String contentType) 
             throws Exception {
        JSONObject map = new JSONObject();
        PropertiesLoader p = new PropertiesLoader("system.properties");
        minio_url = p.getProperty("minio_url");
        minio_name = p.getProperty("minio_name");
        minio_pass = p.getProperty("minio_pass");
        minio_bucketName = p.getProperty("minio_bucketName");
        MinioClient minioClient = new MinioClient(minio_url, minio_name, minio_pass);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
        String ymd = sdf.format(new Date());
        String objectName = ymd + "/" + UUID.randomUUID().toString() + (suffix != null ? suffix : "");
        minioClient.putObject(minio_bucketName, objectName, inputStream, contentType);
        String url = minioClient.getObjectUrl(minio_bucketName, objectName);
        map.put("flag", "0");
        map.put("mess", "上传成功");
        map.put("url", url);
        map.put("urlval", url);
        map.put("path", minio_bucketName + "/" + objectName);
        return map;
    }
}

4. 上传下载文件

代码语言:javascript
复制
package com.minio.client;
 
import io.minio.MinioClient;
import io.minio.errors.MinioException;
import lombok.extern.slf4j.Slf4j;
import org.xmlpull.v1.XmlPullParserException;
 
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
 
@Slf4j
public class FileUploader {
    public static void main(String[] args) 
            throws NoSuchAlgorithmException, IOException, 
                   InvalidKeyException, XmlPullParserException {
        try {
            MinioClient minioClient =
                   new MinioClient("https://minio.sunseaiot.com", "sunseaiot", "sunseaiot",true);
 
            // 检查存储桶是否已经存在
            if(minioClient.bucketExists("ota")) {
                log.info("Bucket already exists.");
            } else {
                // 创建一个名为ota的存储桶
                minioClient.makeBucket("ota");
                log.info("create a new bucket.");
            }
 
            //获取下载文件的url,直接点击该url即可在浏览器中下载文件
            String url = minioClient.presignedGetObject("ota","hello.txt");
            log.info(url);
 
            //获取上传文件的url,这个url可以用Postman工具测试,在body里放入需要上传的文件即可
            String url2 = minioClient.presignedPutObject("ota","ubuntu.tar");
            log.info(url2);
 
            // 下载文件到本地
            minioClient.getObject("ota","hello.txt", "/Users/hbl/hello2.txt");
            log.info("get");
 
            // 使用putObject上传一个本地文件到存储桶中。
            minioClient.putObject("ota","tenant2/hello.txt", "/Users/hbl/hello.txt");
            log.info("/Users/hbl/hello.txt is successfully uploaded as hello.txt to `task1` bucket.");
        } catch(MinioException e) {
            log.error("Error occurred: " + e);
        }
    }
} 

5. 介于spring boot 与 minio 的代码结成完毕

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档