赞
踩
MinIO是一个开源的分布式对象存储服务器,支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发,拥有轻量级、高性能、易部署等特点,并且可以自由选择底层存储介质。它基于Apache License 开源协议,兼容Amazon S3云存储接口。适合存储非结构化数据,如图片,音频,视频,日志等。
官网:MinIO | 用于AI的S3 & Kubernetes原生对象存储
目录
这里使用docker部署
1.拉取镜像
docker pull quay.io/minio/minio
2.创建容器
- docker run \
- -p 9000:9000 \
- -p 9090:9090 \
- --name minio \
- -v /mydata/data:/data \
- -e "MINIO_ROOT_USER=admin" \
- -e "MINIO_ROOT_PASSWORD=wsgxgxsw10" \
- -d \
- quay.io/minio/minio server /mydata/minio/data --console-address ":9090"
其中9090是客户端端口,9000是服务单端口,通过9090端口访问minio客户端,通过9000端口调用minio的API。
挂载的数据卷就是存放我们上传到minio上的文件。
注意,用户名的长度至少为3,密码的长度至少为8,不然容器会启动不了,使用docker logs minio(容器名称) 查看日志会报如下错误
- Unable to validate credentials inherited from the shell environment: Invalid credentials
- > Please provide correct credentials
- HINT:
- Access key length should be at least 3, and secret key length at least 8 characters
然后访问9090端口,输入用户名和密码就可以登录minio的客户端
1.下载MinIO。
访问 minio官方网站,选择适合Windows系统的64位版本进行下载。
2.准备存储文件夹。
在下载路径下,创建一个名为minioData的文件夹,用于存储MinIO上传的文件。
3.启动MinIO。
在命令提示符中,使用minio.exe文件启动MinIO服务器,命令格式为minio.exe server 存储文件夹路径,例如,如果将MinIO安装在D盘,则命令为minio.exe server D:\minioData。
4.访问MinIO控制台。
在浏览器中输入http://localhost:9000,这通常是MinIO的默认访问地址。使用默认的用户名和密码(均为minioadmin)登录。(为什么下面图片上端口不是9000?我也不太清楚,反正我输入的是localhost:9000,他自动就转到这个地址了)
完成这些步骤后,就可以在windows上使用MinIO进行文件存储和管理了。
先在minio中新建一个桶(也可以在代码中实现)
第一步,导入依赖
- <dependency>
- <groupId>io.minio</groupId>
- <artifactId>minio</artifactId>
- <version>8.4.3</version>
- </dependency>
第二步,在配置文件中配置信息
- minio:
- username: xxxx
- password: xxxx
- bucket: xxxx
- url: http://xxxxx:9000
第三步,编写工具类实现文件上传功能
- @Component
- @Slf4j
- public class FileUploader {
-
- @Value("${minio.username}")
- private String username;
-
- @Value("${minio.password}")
- private String password;
-
- @Value("${minio.bucket}")
- private String bucketName;
-
- @Value("${minio.url}")
- private String url;
-
-
-
-
- /**
- * 上传文件
- * @param file
- */
- public String saveFile(MultipartFile file) {
- MinioClient minioClient =
- MinioClient.builder()
- .endpoint(url)
- .credentials(username, password)
- .build();
- try {
- //判断桶是否存在
- boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
- if (!bucketExists){
- //如果不存在,就创建桶
- minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
- }
- //本地时间,具体到年、月、日
- String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
- //加一个/表示创建一个文件夹
- String filename = time+"/"+file.getOriginalFilename();
- //上传
- minioClient.putObject(PutObjectArgs.builder().
- bucket(bucketName).
- object(filename).
- stream(file.getInputStream(), file.getSize(), -1).
- contentType(file.getContentType()).
- build());
-
- //获取地址
- String resurl = minioClient.getPresignedObjectUrl(
- GetPresignedObjectUrlArgs.builder()
- .method(Method.GET)
- .bucket(bucketName)
- .object(filename)
- .expiry(60 * 60) // URL 的有效期(秒)
- .build()
- );
- log.info("文件上传成功,地址:{}",resurl);
- //返回地址
- return resurl;
- } catch (Exception e) {
- log.info("文件上传失败");
- e.printStackTrace();
- }
- return null;
-
- }
-
- }

第四步,调用上面的文件上传方法即可
- @Resource
- private FileUploader fileUploader;
-
- @PostMapping("/test/upload")
- public Result testupload(MultipartFile file){
- String s = fileUploader.saveFile(file);
- return new Result(0,"文件上传成功","url:"+s);
- }
第五步,进行测试
到这里,使用minio进行文件管理就实现了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。