docker部署minio并使用springboot连接的操作方法
需求:工作中,在微信小程序播放时,返回文件流并不能有效的使用,前端需要一个可以访问的地址,springboot默认是有资源拦截器的,但是不适合生产环境的使用
可以提供使用的有例如fastdfs或者minio,这里以minio为例
环境
软件 | 版本 |
docker | 24.0.4 |
minio | RELEASE.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 compose 部署 golang 的 Athens 私有代理问题
这篇文章主要介绍了使用 docker-compose 部署 golang 的 Athens 私有代理,帮助大家快速学习athens 如何构建私有代理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-04-04主机Nginx + Docker WordPress Mysql搭建的详细步骤
这篇文章主要介绍了主机Nginx + Docker WordPress Mysql搭建的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-11-11低版本Docker升级高版本Docker的详细教程及成功避坑
如果我们使用docker来管理容器,那么保持docker引擎的更新将会是十分重要的,下面这篇文章主要给大家介绍了关于低版本Docker升级高版本Docker的详细教程及成功避坑,文中通过图文介绍的非常详细,需要的朋友可以参考下2023-05-05
最新评论