f620abad568a94810c2cfea402d2c3f380f64ead
\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: 规划与创建存储桶 |