Minio文件服务器(超详细!)

1.下载

MinIO | 高性能, Kubernetes 原生对象存储

小伙伴们进入官网选择对应的操作系统下载即可!

 2.准备工作

2.1 运行Minio

下载完成之后输入下面的命令即可运行:

C:\minio.exe server F:\Data --console-address ":9001"

启动完之后可以看到两个地址,api这个是java中用到的端口号9000,下面这个是后台访问用到的端口号,

 2.2 登录

根据网址(http://192.168.175.121:5050)进来之后 ,输入默认的账号密码即可登录进去,账号和密码在运行窗口会显示。

 2.3 创建桶

2.3.1   如果是第一次使用,上来就会让你创建一个桶。

 2.3.2  相对于阿里oss存储来说,Minio创建桶比较简单,只需输入名字就行

2.3.3  创建完之后我们可以看到桶的状态是私有的,点击private可以修改

 

 2.3.4  我们还需要设置桶的accesskey和secretkey(创建完之后务必保存好),到此为止我们的准备工作就做完了!

3.测试 

3.1 导入依赖

<dependency>
   <groupId>io.minio</groupId>
   <artifactId>minio</artifactId>
   <version>8.2.1</version>
</dependency>

3.2 配置文件

minio:
  endpoint: 127.0.0.1
  port: 9000
  accessKey: minioadmin
  secretKey: minioadmin
  secure: false
  bucketName: huike-crm
  configDir: /data/excel
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {

    private final static String HTTP = "http://";

    //endPoint是一个URL,域名,IPv4或者IPv6地址
    private String endpoint;

    //TCP/IP端口号
    private int port;

    //accessKey类似于用户ID,用于唯一标识你的账户
    private String accessKey;

    //secretKey是你账户的密码
    private String secretKey;

    //如果是true,则用的是https而不是http,默认值是true
    private Boolean secure;

    //默认存储桶
    private String bucketName;
}

 

3.3 编写配置类

@Configuration
@EnableConfigurationProperties(MinioProperties.class)
public class MinioConfig {

    @Bean
    public MinioClient minioClient(MinioProperties minioProperties) {
        return MinioClient.builder()
                .endpoint(minioProperties.getEndpoint(),minioProperties.getPort(),minioProperties.getSecure())
                .credentials(minioProperties.getAccessKey(),minioProperties.getSecretKey())
                .build();
    }
}

3.4 编写文件上传的工具类(根据官方文档提供的参考代码按需修改即可)

@Component
public class MinioUtils {
    @Autowired
    private MinioProperties minioProperties;
    
    public String upload(MultipartFile file) throws Exception {
        MinioClient minioClient = MinioClient.builder().
                endpoint("http://" + minioProperties.getEndpoint() + ":" + minioProperties.getPort())
                .credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey()).build();
        boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProperties.getBucketName()).build());
        if (!found) {
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProperties.getBucketName()).build());

        }
        String originalFilename = file.getOriginalFilename();
        String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
        String objectName = UUID.randomUUID().toString() + substring;
        String folderName  = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/"));
        objectName = folderName + objectName;
        minioClient.putObject(PutObjectArgs.builder()
                .bucket(minioProperties.getBucketName())
                .object(objectName)
                .stream(file.getInputStream(), file.getSize(), -1)
                .contentType(file.getContentType())
                .build()
        );

        return "/" + minioProperties.getBucketName() + "/" + objectName;
    }
}

3.5 controller

/**
     * 通用上传请求
     * 提示:将文件上传到minio中,返回的访问路径不是保存到data中,应该调用put方法存储
     * @param file 文件名称
     */
    @ApiOperation("文件-上传")
    @PostMapping("/common/upload")
    public AjaxResult fileUpload(MultipartFile file, HttpServletRequest request) throws Exception {
        String upload = minioUtils.upload(file);
        AjaxResult ajax = AjaxResult.success();
        String url = "http://" + minioProperties.getEndpoint() + ":" + minioProperties.getPort() + upload;
        ajax.put("url", url);
        ajax.put("fileName", upload);
        return ajax;
    }

到此就完成了Minio存储文件,欢迎各位大佬留言!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值