springboot minio 工具类,一站式解决

这篇具有很好参考价值的文章主要介绍了springboot minio 工具类,一站式解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注意

minio 新版本有9000和9090两个端口,web访问是9000,但走api上传和访问都是9090端口

引入pom

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

controller文章来源地址https://www.toymoban.com/news/detail-809581.html

 @PostMapping("uploadMinio")
    public static String uploadMinio(@RequestParam("file") MultipartFile multipartFile){
        try{
           return MinioUtil.upload(multipartFile);
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
MinioUtil
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.errors.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;

public class MinioUtil {

    // 替换为你的MinIO服务器地址、端口、访问密钥和秘密密钥
    private static final String endpoint = "http://localhost:9090";
    private static final String accessKey = "xxx";
    private static final String secretKey = "xxx";
    private static final String bucketName = "xxx";
    private static final String host = "http://localhost:9090/" + bucketName + "/";

    public static String upload(MultipartFile multipartFile) throws IOException {
        InputStream inputStream = null;

        try {
            MinioClient minioClient = MinioClient.builder()
                    .endpoint(endpoint)
                    .credentials(accessKey, secretKey)
                    .build();


            // 获取文件后缀
            String suffix = getFileExtension(multipartFile.getOriginalFilename());
            if (StringUtils.isBlank(suffix)) {
                return "";
            }

            // 修改 objectName 为正确的文件名 + 后缀
            String objectName = UUID.randomUUID().toString().replaceAll("-", "") + "." + suffix;

            inputStream = convertMultipartFileToInputStream(multipartFile);

            // 检查存储桶是否存在,如果不存在则创建
            if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            }

            // 上传文件
            minioClient.putObject(
                    PutObjectArgs.builder()
                            .bucket(bucketName)
                            .object(objectName)
                            .stream(inputStream, multipartFile.getSize(), -1)
                            .contentType("application/octet-stream") // 设置文件类型
                            .build());

            return host + objectName; // 返回上传后的对象名
        } catch (IOException | XmlParserException | ServerException | NoSuchAlgorithmException |
                InsufficientDataException | InvalidKeyException | InvalidResponseException |
                ErrorResponseException | InternalException e) {
            return null;
        } finally {
            inputStream.close();
        }
    }

    public static String getFileExtension(String filePath) {
        int lastDotIndex = filePath.lastIndexOf(".");
        if (lastDotIndex > 0) {
            return filePath.substring(lastDotIndex + 1);
        }
        return ""; // 如果找不到点或没有后缀,则返回空字符串
    }

    public static InputStream convertMultipartFileToInputStream(MultipartFile multipartFile) throws IOException {
        return multipartFile.getInputStream();
    }
}

到了这里,关于springboot minio 工具类,一站式解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 先进API生产力工具eqable HTTP,一站式开发调试工具推荐

    Reqable是什么? Regable = Fiddler/Charles + Postman Reqable是HTTP一站式开发+调试国产化解决方案,拥有更便捷的体验,更先进的协议,更高效的性能和更精致的界面。 Reqable是一款跨平台的专业HTTP开发和调试工具,在全平台支持HTTP1、HTTP2和HTTP3(QUIC)协议,简单易用、功能先进、性能高效

    2024年02月11日
    浏览(55)
  • 极简信息管理工具-WorkFlowy,告别工具选择困难症,一站式搞定GTD+PKM

    建立思维的秩序,减少思维的混乱度-精神熵: 一切皆大纲,实现结构化思考和渐进式写作: 为什么说 Workflowy 重塑了我的知识管理 - 知乎 所有大纲都连成一片,让一切信息从无序到井井有条: 知识连成一片是什么体验? - 知乎 1. 时间日志 记录自己每天的各种活动,将自己

    2024年02月07日
    浏览(44)
  • ChatGPT4 的体验 一站式 AI工具箱 -—Poe(使用教程)

    界面介绍: 是一个基于机器学习的聊天机器人,能够识别自然语言并做出智能回答。Sage通过自然语言处理和对话管理技术来实现对话的自然流畅和个性化,同时支持多种语言。Sage较为擅长语言相关的工作,例如创作文章,做摘要等。 是由开放人工智能(OpenAI)公司开发的一

    2023年04月22日
    浏览(48)
  • ChatGP4 的体验 一站式 AI工具箱 -—Poe(使用教程)

    界面介绍: 是一个基于机器学习的聊天机器人,能够识别自然语言并做出智能回答。Sage通过自然语言处理和对话管理技术来实现对话的自然流畅和个性化,同时支持多种语言。Sage较为擅长语言相关的工作,例如创作文章,做摘要等。 是由开放人工智能(OpenAI)公司开发的一

    2024年02月11日
    浏览(106)
  • 一站式敏捷研发协同平台,敏捷研发解决方案

     Leangoo领歌是一款 永久免费的专业的敏捷开发管理工具 ,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低,可帮助企业快速落地敏捷,提质增效、缩短周期、加速创新。 Leangoo领歌区别于传统项目管

    2024年01月24日
    浏览(51)
  • 使用屏幕捕捉API:一站式解决屏幕录制需求

    随着科技的发展,屏幕捕捉API技术逐渐成为一种热门的录屏方法。本文将详细介绍屏幕捕捉API技术的原理、应用场景以及如何利用这一技术为用户提供便捷、高效的录屏体验。 在线录屏 | 一个覆盖广泛主题工具的高效在线平台(amd794.com) https://amd794.com/recordscreen 一、屏幕捕捉

    2024年01月18日
    浏览(66)
  • (1)、扩展SpringCache一站式解决缓存击穿,穿透,雪崩

    我们在使用SpringCache的@Cacheable注解时,发现并没有设置过期时间这个功能。

    2024年02月12日
    浏览(50)
  • 一站式Flink&Spark平台解决方案——StreamX

    随着 FlinkSpark 生态的不断完善,越来越多的企业选择这两款组件,或者其中之一作为离线 实时的大数据开发工具,但是在使用他们进行大数据的开发中我们会遇到一些问题,比如: 任务运行监控怎么处理? 使用 Cluster 模式还是 Nodeport 暴露端口访问 Web UI ? 提交任务能否简化

    2024年02月13日
    浏览(48)
  • 一站式解决方案:Qt 跨平台开发灵活可靠

    一站式解决方案:Qt 跨平台开发灵活可靠 Qt 是一种跨平台开发工具,为开发者提供了一站式解决方案。无论您的项目目标是 Windows、Linux、macOS、嵌入式系统还是移动平台,Qt 都能胜任。这种跨平台的特性不仅节省开支,还推动了战略的快速落地。 适用范围广泛:Qt 可在多种

    2024年02月07日
    浏览(64)
  • Kyligence Zen 一站式指标平台体验——“绝对实力”的指标分析和管理工具——入门体验评测

    🦖欢迎观阅本本篇文章,我是Sam9029 在知道 Kyligence Zen 之前,我对于该类提供在线化数据处理服务的产品了解甚少 脑子里对于数据处理的印象依旧在传统的办公软件和专业领域软件上 Excel 的大名自不必说, Spss 和 SAS 略有了解,同时作为开发人员, Echarts 倒是使用频率更多

    2024年02月04日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包