\345\257\271\350\261\241\345\255\230\345\202\250\346\235\203\351\231\220\350\256\276\350\256\241\346\226\271\346\241\210.md
... ...
@@ -36,6 +36,53 @@ MinIO 的权限主要在 **存储桶(Bucket)级别** 和 **对象(Object
36 36
37 37
对应的方案是:**创建一个 `public` (或 `download`) 桶存放公共资源,一个 `private` 桶存放业务附件。**
38 38
39
+### 目前实施方案
40
+
41
+目前实施的方案是为平台新增一个公有桶,平台业务涉及到的对象需存储到公有桶中,其他非业务依然沿用原有桶。
42
+但是需要引擎和平台app做相应的调整。
43
+
44
+1 新增两个配置项,分别是后端配置和前端配置;
45
+```properties
46
+ # 后端配置项
47
+ minio.bucket.edition=v2
48
+ minio.iidpBucket=iidp-bucket
49
+
50
+
51
+ # 前端配置项
52
+ bucketType = public/private
53
+```
54
+
55
+2 为什么要有两个配置项
56
+2.1 后端配置功能开关,是为了兼容已有的系统,如果没有配置 `minio.bucket.edition=v2` 则所有逻辑都保持原来一致,如果有配置则按照新逻辑执行;
57
+2.2 前端配置是为了给业务一个选项,因为暴露给前端的接口可能由平台调用也可能由业务调用,所以需要传递一个标识来表明是否需要存储到共有桶。
58
+
59
+3,调整
60
+
61
+3.1 引擎在 `/file/upload` 接口需要处理两个配置项,即前端和后端,只有两个配置项都满足的情况下才执行新逻辑,否则依然是原来逻辑。
62
+3.2 类似地,平台app 也需要处理两个配置项,但是如果只有一个配置项那就只需要处理一个。
63
+
64
+4. 样板代码
65
+
66
+```java
67
+ // 获取 minioTemplate 实例
68
+ MinioTemplate minioTemplate = MinioTemplate.getInstance();
69
+ // 获取业务所需的桶,有两个选择,如果是非平台的业务则用 getBucket,如果是平台业务则调用 getIIDPBucket
70
+ String minioBucketName = minioTemplate.getBucket();
71
+ String minioBucketName = minioTemplate.getIIDPBucket();
72
+
73
+ // 拿到 instance 和 bucket 去使用minio 接口
74
+ String objectName = minioTemplate.putObject(byteArrayInputStream, contentType, originalFilename, bucket);
75
+ // 其他接口等
76
+
77
+ // 同时支持获取预签名的url
78
+ String url = minioTemplate.presignedGetObjectUrl("apps-bucket", "test.json");
79
+ System.out.println(url);
80
+
81
+ url = minioTemplate.presignedObjectUrl(HttpMethod.PUT, "apps-bucket", "test.json");
82
+ System.out.println(url);
83
+
84
+```
85
+
39 86
### ⚙️ 二、方案实施详细步骤
40 87
41 88
#### 步骤 1: 规划与创建存储桶