工具对象存储Minio
定西毕设用Minio搭建一个对象存储服务得了,不用买oss了
docker搭建Minio
1 2 3 4 5 6
   | docker run -d -p 9000:9000 -p 9001:9001 --name minio \ -e "MINIO_ROOT_USER=root" \ -e "MINIO_ROOT_PASSWORD=01020304" \ -v /mnt/data:/data \ -v /mnt/config:/root/.minio \ minio/minio server --console-address ":9001" /data
   | 
 
密码最低八位….,不然启动失败:

minio concole配置
文件上传后默认是不会返回url的,但是可以获取临时的访问链接,这个链接最长7天,不符合业务要求,所以可以新增存储桶的规则:

这样就可以直接通过ip:port/bucket/filename来访问了
Springboot整合minio
依赖
1 2 3 4 5
   | <dependency>     <groupId>io.minio</groupId>     <artifactId>minio</artifactId>     <version>8.5.7</version> </dependency>
   | 
 
配置文件
1 2 3 4 5
   | minio:   endpoint: http://xxxx:9000   access-key: paJorTxxxxxx5PWJ1   secre-key: gwDjy61ZhVExxxxxxw4ujifoUrCNSM   bucketName: food.guide
   | 
 
配置类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   | package com.zzmr.fgback.config;
  import io.minio.MinioClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;
 
 
 
 
  @Configuration public class MinioConfig {
      @Autowired     private MinioProperties minioProperties;
      @Bean     public MinioClient minioClient() {         MinioClient minioClient = MinioClient.builder()                 .endpoint(minioProperties.getEndpoint())                 .credentials(minioProperties.getAccessKey(), minioProperties.getSecreKey())                 .build();         return minioClient;     } }
   | 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
   | package com.zzmr.fgback.config;
  import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;
 
 
 
 
  @Component @Data @ConfigurationProperties(prefix = "minio") public class MinioProperties {     private String endpoint;     private String accessKey;     private String secreKey; }
   | 
 
工具类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
   | package com.zzmr.fgback.util;
  import com.zzmr.fgback.config.MinioProperties; import com.zzmr.fgback.exception.BaseException; import com.zzmr.fgback.result.Result; import io.minio.MinioClient; import io.minio.PutObjectArgs; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile;
  import java.io.InputStream; import java.util.UUID;
 
 
 
 
  @Component public class MinioUtils {
      @Autowired     private MinioClient minioClient;
      @Value("${minio.bucketName}")     private String bucketName;
      @Autowired     private MinioProperties minioProperties;
      public String upload(MultipartFile file) {         String originalFileName = file.getOriginalFilename();                  String suffix = originalFileName.substring(originalFileName.lastIndexOf("."));                  UUID uuidName = UUID.randomUUID();         String imgName = uuidName + suffix;         try {                          InputStream in = file.getInputStream();             minioClient.putObject(PutObjectArgs.builder()                     .bucket(bucketName)                     .object(imgName)                     .stream(in, file.getSize(), -1)                     .contentType(file.getContentType())                     .build());             in.close();             System.out.println("上传成功: " + imgName);
                           String imgUrl = minioProperties.getEndpoint() + "/" + bucketName + "/" + imgName;             return imgUrl;         } catch (Exception e) {             throw new BaseException("上传失败");         }     } }
   | 
 
上传接口
1 2 3 4 5 6 7 8 9
   | @ApiOperation("上传一个") @PostMapping("/upload") public Result upload(@RequestParam(name = "file") MultipartFile file) {     if (file == null) {         throw new BaseException("文件为空!");     }     String imgUrl = minioUtils.upload(file);     return Result.success(imgUrl); }
  | 
 
总结
还是挺简单的,速度受限于服务器的速度