1、下载链接
wget http://dl.minio.org.cn/server/minio/release/darwin-amd64/minio
2、赋予可执行权限,文件颜色变绿了表示可执行,之前是白色
chmod +x minio
3、启动
./minio server /data
#后台运行
nohup ./minio server ./data > ./logs/minio.log —address 0.0.0.0:9000 —console-address 0.0.0.0:9001 2>&1 &#

用户名
export MINIO_ACCESS_KEY=minio2021
#密码
export MINIO_SECRET_KEY=minio2021
查看进程
ps -ef | grep minio

工具类

  1. package com.example.utils;
  2. import com.example.entity.FileInfo;
  3. import com.example.exception.MyException;
  4. import io.minio.MinioClient;
  5. import io.minio.ObjectStat;
  6. import io.minio.policy.PolicyType;
  7. import lombok.Data;
  8. import org.springframework.stereotype.Component;
  9. import org.springframework.web.multipart.MultipartFile;
  10. import java.io.InputStream;
  11. import java.security.MessageDigest;
  12. import java.security.NoSuchAlgorithmException;
  13. import java.time.LocalDate;
  14. import java.util.UUID;
  15. /**
  16. * 文件服务访问路径 服务器地址/端口号/存储桶/文件名
  17. * eg:http://222.178.212.29:9000/2020-12-08/05a4358f-d37d-4ea5-92c3-edee92145095-shop.jpg
  18. */
  19. @Component
  20. @Data
  21. public class MinioUtil {
  22. //ip
  23. public static final String ENDPOINT = "http://116.62.119.246";
  24. //端口
  25. public static final int PROT = 9000;
  26. //ACCESS_KEY
  27. private static final String ACCESSKEY = "minio2021"; //用户名
  28. //SECRET_KEY
  29. private static final String SECRETKET = "minio2021";//密码
  30. //存储桶名称
  31. private static String BUCKETNAME = null;
  32. /**
  33. * 删除文件
  34. *
  35. * @param bucketName 存储桶名称
  36. * @param objectName 存储桶里的文件名称
  37. * @return
  38. * @throws Exception
  39. */
  40. public static void removeFile(String bucketName, String objectName) {
  41. try {
  42. MinioClient minioClient = new MinioClient(ENDPOINT, PROT, ACCESSKEY, SECRETKET);
  43. ObjectStat objectStat = minioClient.statObject(bucketName, objectName);
  44. if (objectStat != null) {
  45. minioClient.removeObject(bucketName, objectName);
  46. } else {
  47. throw new MyException(false,500, "删除文件不存在");
  48. }
  49. } catch (Exception e) {
  50. throw new MyException(false,500, "文件删除失败");
  51. }
  52. }
  53. /**
  54. * 文件上传
  55. *
  56. * @param file 文件
  57. * @param buchetName 桶名
  58. * @return
  59. * @throws Exception
  60. */
  61. public static Boolean upload(MultipartFile file, String buchetName) {
  62. String BUCKETNAME =null;
  63. try {
  64. MinioClient minioClient = new MinioClient(ENDPOINT, PROT, ACCESSKEY, SECRETKET);
  65. //存入bucket不存在则创建
  66. if (!minioClient.bucketExists(BUCKETNAME)) {
  67. minioClient.makeBucket(BUCKETNAME);
  68. //存储桶名称 文件对象前缀 存储策略:读写
  69. minioClient.setBucketPolicy(BUCKETNAME, "*", PolicyType.READ_WRITE);
  70. }
  71. String fileName = file.getOriginalFilename();//原始文件名
  72. String prefix = fileName.substring(fileName.lastIndexOf(".") + 1);//后缀名
  73. // 文件存储的目录结构
  74. String uuid = UUID.randomUUID().toString().replaceAll("-","");
  75. String objectName =LocalDate.now().toString().replaceAll("-","") +"-"+ uuid + "-" + fileName;
  76. // 存储文件
  77. minioClient.putObject(BUCKETNAME, objectName, file.getInputStream(), file.getContentType());
  78. } catch (Exception e) {
  79. e.printStackTrace();
  80. throw new MyException(false,500, "上传失败");
  81. }
  82. return true;
  83. }
  84. /**
  85. * 下载文件
  86. *
  87. * @param bucketName 存储桶名称
  88. * @param objectName 存储桶里的文件名称
  89. * @return
  90. * @throws Exception
  91. */
  92. public static InputStream getFile(String bucketName, String objectName) {
  93. InputStream inputStream = null;
  94. try {
  95. MinioClient minioClient = new MinioClient(ENDPOINT, PROT, ACCESSKEY, SECRETKET);
  96. ObjectStat objectStat = minioClient.statObject(bucketName, objectName);
  97. if (objectStat != null) {
  98. inputStream = minioClient.getObject(bucketName, objectName);
  99. } else {
  100. throw new MyException(false,500, "文件不存在");
  101. }
  102. } catch (Exception e) {
  103. e.printStackTrace();
  104. throw new MyException(false,500, "下载失败");
  105. }
  106. return inputStream;
  107. }
  108. }