窝瓜云盘

11/7/2022 wogua

# 第一章 简介

类似于百度网盘功能,但是实际功能比较少,支持10M文件上传和下载

文件存储方式为MinIO分布式存储服务,通过java-sdk进行相关操作

# 第二章 效果展示

# 第三章 核心代码

MinioProperty

Minio配置参数

@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProperty {

    private String endpoint;

    private String username;

    private String password;
}

1
2
3
4
5
6
7
8
9
10
11
12

MinioFactory

MinioFactory开始是想通过单例模式创建MinioClient对象,最终是MinioClient对象注入

@Component
public class MinioFactory {

    @Autowired
    private MinioProperty minioProperty;

    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(minioProperty.getEndpoint())
                .credentials(minioProperty.getUsername(), minioProperty.getPassword())
                .build();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

MinioUtils

MinioUtils主要封装了对MinIO Server操作的的方法

@Component
public class MinioUtils {

    @Autowired
    private MinioClient minioClient;

    /**
     * 删除文件
     * @param objectName
     */
    public void removeFile(String bucketName, String objectName)throws Exception {
        RemoveObjectArgs args = RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build();
        minioClient.removeObject(args);
    }


    /**
     * 是否存在桶
     * @param name
     * @return
     */
    public boolean existBucket(String name) throws Exception {
        BucketExistsArgs buildExistsArgs = BucketExistsArgs.builder().bucket(name).build();
        return minioClient.bucketExists(buildExistsArgs);

    }

    /**
     * 创建bucket
     */
    public void createBucket(String bucketName) throws Exception {
        BucketExistsArgs bucket = BucketExistsArgs.builder().bucket(bucketName).build();
        minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
    }

    /**
     * 对象列表
     * prefix 可以为空,空串
     */
    public Iterable<Result<Item>> listObjects(String bucketName, String prefix) throws Exception {
        ListObjectsArgs listObjects = ListObjectsArgs.builder().bucket(bucketName).prefix(prefix).build();
        return minioClient.listObjects(listObjects);
    }

    /**
     * 上传文件
     * @param file
     * @param bucketName
     * @param object
     * @throws Exception
     */
    public void putObject(MultipartFile file, String bucketName, String object)throws Exception {
        PutObjectArgs args = PutObjectArgs.builder()
                .bucket(bucketName)
                .object(object)
                .stream(file.getInputStream(), file.getSize(), -1)
                .contentType(file.getContentType())
                .build();
        minioClient.putObject(args);
    }

    /**
     * 获取对象
     * @param bucketName
     * @param object
     * @return
     * @throws Exception
     */
    public FilterInputStream getObject(String bucketName, String object) throws Exception {
        GetObjectArgs getObject = GetObjectArgs.builder().bucket(bucketName).object(object).build();
        return this.minioClient.getObject(getObject);
    }
}
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Last Updated: 11/7/2022, 11:03:41 AM