springboot实现文件上传到minio

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

一、前言
最近在项目中用的使用minio来上传文件,因此在这里给告诉大家如何实现

二、实现文件上传至minio
1.添加相关的maven依赖

<dependency>
			<groupId>io.minio</groupId>
			<artifactId>minio</artifactId>
			<version>8.4.3</version>
			<exclusions>
				<exclusion>
					<groupId>com.squareup.okhttp3</groupId>
					<artifactId>okhttp</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>okhttp</artifactId>
			<version>4.10.0</version>
		</dependency>

2.minio连接配置
(1)首先配置minio属性

import com.smartcitysz.dp.upload.constants.PlatformEnum;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {
    private String accessKey;
    private String secretKey;
    private String endpoint;
    private String bucket;
    /**
     * 访问域名
     */
    private String domain = "";
    /**
     * 启用存储
     */
    private Boolean enableStorage = true;
    /**
     * 存储平台
     */
    private PlatformEnum platform = PlatformEnum.MINIO;
    /**
     * 基础路径
     */
    private String basePath = "";
}

(2)接着配置minio连接,代码如下:

import com.smartcitysz.dp.minio.MinioService;
import com.smartcitysz.dp.minio.utils.MinioUtils;
import io.minio.MinioClient;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
@EnableConfigurationProperties(MinioProperties.class )
public class MinioConfiguration {

    @Bean
    @ConditionalOnBean(MinioProperties.class)
    public MinioClient minioClient(MinioProperties minioProperties) {
        return MinioClient.builder()
                .endpoint(minioProperties.getEndpoint())
                .credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
                .build();
    }

   
    @Bean
    @ConditionalOnBean(MinioClient.class)
    public MinioUtils minioUtils(MinioClient minioClient) {
        return new MinioUtils(minioClient);
    }

    @Bean
    @ConditionalOnBean(value = {MinioClient.class, MinioUtils.class})
    public MinioService minionService(MinioProperties minioProperties, MinioUtils minioUtils) {
        return new MinioService(minioProperties, minioUtils);
    }
}

(3)在YAML添加minio配置

minio:
  endpoint: http://xxxxxx:1222
  accessKey: xxxxxxxx
  secretKey: xxxxxxxxxxx
  bucket: my-bucket

3.定义minio工具类,代码如下:

@Slf4j
public class MinioUtils {

    private  MinioClient minioClient;

    public MinioUtils(MinioClient minioClient) {
        this.minioClient = minioClient;
    }

     public MinioUtils() {
     }

    /**
     * 初始化桶
     * @throws Exception 抛出异常
     */
   public void createBucket(String bucketName)throws Exception{
        if (!bucketExists(bucketName)) {
            /* 制作桶参数 */
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
        }
    }

    /**
     * 验证桶名是否存在
     * @param bucketName 桶名
     * @return 返回信息
     * @throws Exception 抛出异常
     */
    public boolean bucketExists(String bucketName)throws Exception {
        return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
    }


    /**
     * 文件上传
     * @param bucketName 桶名
     * @param objectName 路径 + 文件名 + 后缀
     * @param inputStream 流对象
     * @param contentType 文件类型
     * @return 对象写入响应
     * @throws Exception 抛出异常
     */
    public ObjectWriteResponse uploadFile(String bucketName,String objectName,InputStream inputStream, String contentType)  throws Exception{
        return minioClient.putObject(
                PutObjectArgs.builder().bucket(bucketName).object(objectName).contentType(contentType).stream(inputStream,inputStream.available(), -1).build());
    }

    /**
     * 上传本地文件
     * @param bucketName 桶名
     * @param objectName 路径 + 文件名 + 后缀
     * @param fileName 文件的路径
     * @param contentType 文件类型
     * @return 对象写入响应
     * @throws Exception 抛出异常
     */
    public ObjectWriteResponse uploadFile(String bucketName,String objectName,String fileName, String contentType)  throws Exception{
        return minioClient.uploadObject(
                UploadObjectArgs.builder().bucket(bucketName).object(objectName).filename(fileName).contentType(contentType).build());
    }

    /**
     * 通过流上传文件
     * @param bucketName 桶名
     * @param objectName 路径 + 文件名 + 后缀
     * @param inputStream 流对象
     * @return 对象写入响应
     * @throws Exception 抛出异常
     */
    public ObjectWriteResponse uploadFile(String bucketName,String objectName,InputStream inputStream)  throws Exception{
        return minioClient.putObject(
                PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(inputStream,inputStream.available(),-1).build());
    }

4.编写实现文件上传的Service

public class MinioService {

    private MinioProperties minioProperties;

    private MinioUtils minioUtils;

    public MinioService(MinioProperties minioProperties, MinioUtils minioUtils) {
        this.minioProperties = minioProperties;
        this.minioUtils = minioUtils;
    }

    public MinioService() {
    }

     /**
     * @param file 使用MultipartFile进行文件上传
     * @return 返回的是带有后缀的唯一id 如b0adb5d9b2f741e2b3907e330fd1825e.jpg  b0adb5d9b2f741e2b3907e330fd18251.txt
     */
    public String uploadFile(MultipartFile file) {
        try {
            String bucketName = minioProperties.getBucket();
            if (!StringUtils.hasLength(bucketName)) {
                throw new RuntimeException("bucketName is empty");
            }
            String fileName = file.getOriginalFilename();
            minioUtils.createBucket(bucketName);
            String objectName = UUID.randomUUID().toString().replaceAll("-", "")
                    + fileName.substring(fileName.lastIndexOf("."));
            minioUtils.uploadFile(bucketName, objectName, file);
            return objectName;
        } catch (Exception e) {
            log.error("uploadFile error ,msg is {}", e);
            return null;
        }
    }
     /**
     * @param file MultipartFile文件对象
     * @return 返回的是不带有后缀的唯一id 如b0adb5d9b2f741e2b3907e330fd1825e b0adb5d9b2f741e2b3907e330fd18251
     */
    public String uploadFileNoSuffix(MultipartFile file) {
        try {
            String bucketName = minioProperties.getBucket();
            if (!StringUtils.hasLength(bucketName)) {
                throw new RuntimeException("bucketName is empty");
            }
            minioUtils.createBucket(bucketName);
            String objectName = UUID.randomUUID().toString().replaceAll("-", "");
            minioUtils.uploadFile(bucketName, objectName, file);
            return objectName;
        } catch (Exception e) {
            log.error("uploadFileNoSuffix error ,msg is {}", e);
            return null;
        }
    }
/**
     * @param file 使用MultipartFile进行文件上传
     * @return 返回的是带有后缀的唯一id 如b0adb5d9b2f741e2b3907e330fd1825e.jpg  b0adb5d9b2f741e2b3907e330fd18251.txt
     */
    public String uploadFile(File file) {
        try {
            InputStream inputStream = new FileInputStream(file);
            return uploadFile(inputStream);
        } catch (Exception e) {
            log.error("uploadFile error ,msg is {}", e);
            return null;
        }
    }
 /**
     * 通过流上传文件
     *
     * @param inputStream 文件流
     * @return 返回的是不带有后缀的唯一id 如b0adb5d9b2f741e2b3907e330fd1825e b0adb5d9b2f741e2b3907e330fd18251
     */
    public String uploadFile(InputStream inputStream) throws Exception {
        try {
            String bucketName = minioProperties.getBucket();
            if (!StringUtils.hasLength(bucketName)) {
                throw new RuntimeException("bucketName is empty");
            }
            String objectName = UUID.randomUUID().toString().replaceAll("-", "");
            minioUtils.uploadFile(bucketName, objectName, inputStream);
            return objectName;
        } catch (Exception e) {
            log.error("uploadFile error ,msg is {}", e);
            return null;
        }

    }

    /**
     * 通过流上传文件
     *
     * @param inputStream 文件流
     * @return 返回的是不带有后缀的唯一id 如b0adb5d9b2f741e2b3907e330fd1825e b0adb5d9b2f741e2b3907e330fd18251
     */
    public String uploadFile(InputStream inputStream) throws Exception {
        try {
            String bucketName = minioProperties.getBucket();
            if (!StringUtils.hasLength(bucketName)) {
                throw new RuntimeException("bucketName is empty");
            }
            String objectName = UUID.randomUUID().toString().replaceAll("-", "");
            minioUtils.uploadFile(bucketName, objectName, inputStream);
            return objectName;
        } catch (Exception e) {
            log.error("uploadFile error ,msg is {}", e);
            return null;
        }

    }
 }

4.最后在controller层调用下就可以了。
大家可以自己尝试下文章来源地址https://www.toymoban.com/news/detail-706688.html

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

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

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

相关文章

  • springboot实现minio文件分片上传

    在Spring Boot中实现MinIO的文件分片上传涉及到几个关键步骤。MinIO是一个高性能的分布式对象存储服务,它兼容Amazon S3的API。分片上传主要用于上传大文件,将大文件分成多个部分,分别上传,最后再将这些部分合并成一个完整的文件。这样做的好处是提高了上传的可靠性,并

    2024年01月17日
    浏览(59)
  • SpringBoot整合Minio实现文件上传、下载

    SpringBoot整合Minio实现文件上传、下载: 1,介绍高性能分布式存储文件服务Minio:Minio是 基于Go语言编写的对象存储服务 , 适合于存储大容量非结构化的数据 ,例如 图片、音频、视频、日志文件、备份数据和容器/虚拟机镜像等 ,而一个对象文件可以是任意大小,从几kb到最

    2024年02月06日
    浏览(47)
  • SpringBoot+MinIO 实现文件上传、读取、下载、删除

    一、 MinIO 二、 MinIO安装和启动 三、 pom.xml 四、 applicatin.properties(配置文件) 五、 编写Java业务类

    2024年02月09日
    浏览(44)
  • Spring Boot 实现多文件上传

    代码结构: Controller层 跨域拦截器配置 application.properties 配置 前端页面 效果展示 获取图片的url并且读取图片 修改tomcat的server.xml文件 加上下面这句

    2023年04月08日
    浏览(46)
  • Spring Boot实现文件上传和下载

    1.文件上传 在pom.xml文件中添加依赖: spring-boot-starter-web 和 spring-boot-starter-thymeleaf 。 创建一个上传前端的页面,包括一个表单来选择文件和一个提交按钮。 在Controller中添加一个POST方法,该方法接受 MultipartFile 参数,将文件保存在服务器上。 在application.properties文件中配置上

    2024年02月04日
    浏览(43)
  • Spring Boot 实现文件本地以及OSS上传

    Maven依赖 封装工具类 上面的代码我们可以定义一个工具类,这样在任何需要文件上传的地方只需要调用 upload 方法即可,大大减少了代码量 使用工具类

    2024年03月08日
    浏览(44)
  • Spring Boot实现文件上传的两种方式

    最近的一个小项目里使用到了文件上传、下载功能,今天我打算梳理一下文件上传所涉及的技术及实现。 内容主要包括两部分,如何通过纯 Servlet 的形式进行文件上传、保存(不通过 Spring 框架);另一部分是如何在 Spring Web MVC 中进行文件上传。 HTTP 协议传输文件一般都遵循

    2024年02月05日
    浏览(47)
  • Spring boot实现上传文件至本地或服务器

    大家好 我是程序猿小张 图片文件上传是项目中必不可少的一个功能,上传的地址也当然是优先选择第三方的对象存储,例如七牛云、阿里云等等,但是当中的话只有七牛云是有一个免费额度的,其他都是要收钱的。所以就想着,哎,这个能不能上传到本地呢?答案是肯定可

    2024年02月11日
    浏览(57)
  • SpringBoot上传文件到Minio服务器,支持批量上传

    本文主要介绍如何使用SpringBoot上传到minio服务器。 没什么可多说的,公司用什么咱们开发研究什么就完事了。直接分享核心代码。 minio依赖 配置文件 首先是核心的参数,包括服务器minio地址,以及用户名密码,使用的桶名称 controller代码 如果只需要上传文件,只需要Multipa

    2024年02月08日
    浏览(47)
  • SpringBoot整合minio,文件的上传下载,批量获取

    Minio是GlusterFS创始人之一Anand Babu Periasamy发布新的开源项目。基于Apache License v2.0开源协议的对象存储项目,采用Golang实现,客户端支Java,Python,Javacript, Golang语言。 其设计的主要目标是作为私有云对象存储的标准方案。主要用于存储海量的图片,视频,文档等。非常适合于存储

    2024年02月12日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包