当前位置:   article > 正文

使用minio进行文件存储_minio存文件

minio存文件

MinIO是一个开源的分布式对象存储服务器,支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发,拥有轻量级、高性能、易部署等特点,并且可以自由选择底层存储介质。它基于Apache License 开源协议,兼容Amazon S3云存储接口。适合存储非结构化数据,如图片,音频,视频,日志等。

官网:MinIO | 用于AI的S3 & Kubernetes原生对象存储

目录

Linux安装minio

Window安装minio

后台代码实现上传文件到minio


Linux安装minio

这里使用docker部署

1.拉取镜像

docker pull quay.io/minio/minio

2.创建容器

  1. docker run \
  2. -p 9000:9000 \
  3. -p 9090:9090 \
  4. --name minio \
  5. -v /mydata/data:/data \
  6. -e "MINIO_ROOT_USER=admin" \
  7. -e "MINIO_ROOT_PASSWORD=wsgxgxsw10" \
  8. -d \
  9. quay.io/minio/minio server /mydata/minio/data --console-address ":9090"

其中9090是客户端端口,9000是服务单端口,通过9090端口访问minio客户端,通过9000端口调用minio的API。

挂载的数据卷就是存放我们上传到minio上的文件。

注意,用户名的长度至少为3,密码的长度至少为8,不然容器会启动不了,使用docker logs minio(容器名称) 查看日志会报如下错误

  1. Unable to validate credentials inherited from the shell environment: Invalid credentials
  2. > Please provide correct credentials
  3. HINT:
  4. Access key length should be at least 3, and secret key length at least 8 characters

然后访问9090端口,输入用户名和密码就可以登录minio的客户端

Window安装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

先在minio中新建一个桶(也可以在代码中实现)

第一步,导入依赖

  1. <dependency>
  2. <groupId>io.minio</groupId>
  3. <artifactId>minio</artifactId>
  4. <version>8.4.3</version>
  5. </dependency>

第二步,在配置文件中配置信息

  1. minio:
  2. username: xxxx
  3. password: xxxx
  4. bucket: xxxx
  5. url: http://xxxxx:9000

第三步,编写工具类实现文件上传功能

  1. @Component
  2. @Slf4j
  3. public class FileUploader {
  4. @Value("${minio.username}")
  5. private String username;
  6. @Value("${minio.password}")
  7. private String password;
  8. @Value("${minio.bucket}")
  9. private String bucketName;
  10. @Value("${minio.url}")
  11. private String url;
  12. /**
  13. * 上传文件
  14. * @param file
  15. */
  16. public String saveFile(MultipartFile file) {
  17. MinioClient minioClient =
  18. MinioClient.builder()
  19. .endpoint(url)
  20. .credentials(username, password)
  21. .build();
  22. try {
  23. //判断桶是否存在
  24. boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
  25. if (!bucketExists){
  26. //如果不存在,就创建桶
  27. minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
  28. }
  29. //本地时间,具体到年、月、日
  30. String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  31. //加一个/表示创建一个文件夹
  32. String filename = time+"/"+file.getOriginalFilename();
  33. //上传
  34. minioClient.putObject(PutObjectArgs.builder().
  35. bucket(bucketName).
  36. object(filename).
  37. stream(file.getInputStream(), file.getSize(), -1).
  38. contentType(file.getContentType()).
  39. build());
  40. //获取地址
  41. String resurl = minioClient.getPresignedObjectUrl(
  42. GetPresignedObjectUrlArgs.builder()
  43. .method(Method.GET)
  44. .bucket(bucketName)
  45. .object(filename)
  46. .expiry(60 * 60) // URL 的有效期(秒)
  47. .build()
  48. );
  49. log.info("文件上传成功,地址:{}",resurl);
  50. //返回地址
  51. return resurl;
  52. } catch (Exception e) {
  53. log.info("文件上传失败");
  54. e.printStackTrace();
  55. }
  56. return null;
  57. }
  58. }

第四步,调用上面的文件上传方法即可

  1. @Resource
  2. private FileUploader fileUploader;
  3. @PostMapping("/test/upload")
  4. public Result testupload(MultipartFile file){
  5. String s = fileUploader.saveFile(file);
  6. return new Result(0,"文件上传成功","url:"+s);
  7. }

第五步,进行测试

到这里,使用minio进行文件管理就实现了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/583402
推荐阅读
  

闽ICP备14008679号