docker部署minio并使用springboot连接的操作方法

 更新时间:2023年11月02日 10:41:39   作者:[奸笑]这个不是斜眼笑[奸笑]  
这篇文章主要介绍了docker部署minio并使用springboot连接的操作方法,本文以minio为例结合实例代码给大家详细讲解,需要的朋友可以参考下

需求:工作中,在微信小程序播放时,返回文件流并不能有效的使用,前端需要一个可以访问的地址,springboot默认是有资源拦截器的,但是不适合生产环境的使用

可以提供使用的有例如fastdfs或者minio,这里以minio为例

环境

软件版本
docker24.0.4
minioRELEASE.2023-10-24T05-18-28Z (commit-id=97cc12fdc539361cf175ffc2f00480eec0836d82)

minio安装

docker命令

docker run -d \
-p 9000:9000 \
-p 9001:9001 \
--name minio 
--restart=always 
--privileged=true \
-v /home/minio/data:/data \
-e "MINIO_ROOT_USER=user" \
-e "MINIO_ROOT_PASSWORD=password" \
minio/minio server /data 
--console-address ":9001"

开启linux防火墙

centos开启防火墙

开启端口

sudo firewall-cmd --zone=public --add-port=6379/tcp --permanent

重启防火墙

sudo firewall-cmd --reload

打开浏览器访问 ip:9001

看到此页面即为成功

springboot整合minio

pom.xml

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

 配置类

@Configuration
public class MinioConfig {
    @Value("${minio.endpoint}")
    private String endpoint;
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secretKey}")
    private String secretKey;
    @Bean
    public MinioClient minioClient(){
        return
                MinioClient.builder()
                        .endpoint(endpoint)
                        .credentials(accessKey, secretKey)
                        .build();
    }
}

文件上传的工具类

@Slf4j
public class MinioUtils {
    public static String uploadFile(MinioClient minioClient, InputStream inputStream, String bucket, String filename) {
        try {
            boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("public").build());
            if (!found) {
                minioClient.makeBucket(MakeBucketArgs.builder().bucket("public").build());
            }
            ObjectWriteResponse response = minioClient.putObject(
                    PutObjectArgs
                            .builder()
                            .bucket(bucket)
                            .object(filename)
                            .stream(inputStream, inputStream.available(), -1)
                            .contentType(InferStatusConstant.WAV_CONTENT_TYPE)
                            .build()
            );
            String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
                            .bucket(bucket)
                            .expiry(7 * 24 * 60 * 60)
                            .object(filename)
                            .method(Method.GET)
                            .build());
            log.info("分享地址:" + url);
            return url;
        } catch (ErrorResponseException | InsufficientDataException | InternalException | InvalidKeyException |
                 InvalidResponseException | IOException | NoSuchAlgorithmException | ServerException |
                 XmlParserException e) {
            throw new RuntimeException(e);
        }
    }
}

 测试类:

@Test
public void uploadFileToMinio() {
    try (FileInputStream stream = new FileInputStream("/path/to/file")) {
        String url = MinioUtils.uploadFile(minioClient, stream, "test", "/test/test1.wav");
        System.out.println(url);
    } catch (Exception e) {
    }
}

遇到的一些问题  运行springboot的测试类没有上传,debug之后显示s3 api requests must be made to api port.

解决方案:

进入docker

docker exec -it minio bash

进入后,查看信息

mc config host ls

找到自己的服务,我的为localhost,查看下方的url等信息均不对,移除当前服务

mc config host remove 服务名

添加新的服务,注意url信息,注意端口

mc config host add 服务名 http://IP:9000 user password --api S3v4

不需要重启,重新运行测试代码,发现运行成功

在使用的过程中生成分享连接为127.0.0.1/XXXXXXX

解决方案同上,修改自己的ip

到此这篇关于docker部署minio并使用springboot连接的文章就介绍到这了,更多相关docker部署minio内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决docker与vmware的冲突问题

    解决docker与vmware的冲突问题

    这篇文章主要介绍了解决docker与vmware的冲突问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • docker的常用命令详解

    docker的常用命令详解

    这篇文章主要列举了docker的常用命令,本文给大家介绍的非常详细,有需要的朋友可以参考阅读
    2023-04-04
  • 一篇文章学会Docker命令小结

    一篇文章学会Docker命令小结

    这篇文章主要介绍了一篇文章学会Docker命令小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 数据卷(Data Volumes)及dockefile详解

    数据卷(Data Volumes)及dockefile详解

    在生产环境中使用Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作,今天给大家介绍下数据卷(Data Volumes)及dockefile的相关知识,感兴趣的朋友一起看看吧
    2023-01-01
  • Docker 数据卷操作的实现

    Docker 数据卷操作的实现

    这篇文章主要介绍了Docker 数据卷操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • 讲解使用Docker搭建Java Web运行环境

    讲解使用Docker搭建Java Web运行环境

    本篇文章详细的介绍了使用Docker搭建Java Web运行环境,想要学习docker的同学可以了解一下。
    2016-11-11
  • docker 动态映射运行的container端口实例详解

    docker 动态映射运行的container端口实例详解

    这篇文章主要介绍了 docker 动态映射运行的container端口实例详解的相关资料,需要的朋友可以参考下
    2016-10-10
  • docker打包python镜像的全教程分享

    docker打包python镜像的全教程分享

    Docker是一种开源的容器化平台,可以让开发者将应用程序和其依赖项打包到一个可移植的容器中,然后在不同的环境中运行,本文主要给大家介绍了docker打包python镜像全教程,需要的朋友可以参考下
    2024-02-02
  • Docker安装RabbitMQ AMQP协议及重要角色

    Docker安装RabbitMQ AMQP协议及重要角色

    这篇文章主要为大家介绍了Docker安装RabbitMQ AMQP协议和主要角色详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Docker Push Skipped foreign layer 的错误问题及解决方案

    Docker Push Skipped foreign layer 的错误问题及解决方案

    当Docker推送基于Windows镜像到私有仓库的时候会遇到Skipped foreign layer的问题,这篇文章主要介绍了Docker Push Skipped foreign layer 的错误问题及解决方案,需要的朋友可以参考下
    2022-05-05

最新评论