Class KnoluxS3OperationSpec
java.lang.Object
com.knolux.s3.KnoluxS3OperationSpec
動態 S3 操作規格,用於執行期間從請求 Payload 組裝完整的 S3 操作參數。
靜態 vs 動態模式
- 靜態模式 — 直接注入
KnoluxS3Template使用 Properties 預設值, 無需建立此物件。 - 動態模式 — 從 REST API body 或 Message Queue Payload 取得欄位,
透過
組裝,必須呼叫
invalid reference
#builder()mergeDefaults(KnoluxS3Properties)填補null欄位並鎖定部署級別設定。
欄位分類
- 動態欄位(
endpoint、region、accessKey、secretKey、bucket、key)— payload 可覆寫;null時由mergeDefaults(KnoluxS3Properties)以 Properties 填補。 - 部署級別設定(
forcePathStyle、removePathPrefix、pathPrefix、trustSelfSigned)— 一律以 Properties 為準, 防止呼叫端透過 payload 繞過部署配置。
MQ Handler 使用範例
KnoluxS3OperationSpec spec = KnoluxS3OperationSpec.builder()
.endpoint(message.getS3Endpoint()) // null 時 fallback 至 Properties
.region(message.getS3Region())
.accessKey(message.getSecretId()) // SeaweedFS 稱為 secretId
.secretKey(message.getSecretKey())
.bucket(message.getBucket())
.key(message.getObjectKey())
.build()
.mergeDefaults(s3Properties); // 必填;填補 null 並鎖定部署設定
s3Template.download(spec, AsyncResponseTransformer.toBytes());
REST API 使用範例
@PostMapping("/download")
public ResponseEntity<byte[]> download(@RequestBody S3DownloadRequest req) {
KnoluxS3OperationSpec spec = KnoluxS3OperationSpec.builder()
.endpoint(req.endpoint())
.bucket(req.bucket())
.key(req.key())
.accessKey(req.accessKey())
.secretKey(req.secretKey())
.build()
.mergeDefaults(s3Properties);
byte[] content = s3Template.download(spec, AsyncResponseTransformer.toBytes())
.join()
.asByteArray();
return ResponseEntity.ok(content);
}
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionmergeDefaults(KnoluxS3Properties defaults) 以靜態KnoluxS3Properties填補null欄位,回傳完整 spec。
-
Constructor Details
-
KnoluxS3OperationSpec
public KnoluxS3OperationSpec()
-
-
Method Details
-
mergeDefaults
以靜態KnoluxS3Properties填補null欄位,回傳完整 spec。動態欄位規則:若 payload 已提供非
null值則保留, 否則以defaults對應欄位填補。部署級別設定規則:
forcePathStyle、removePathPrefix、pathPrefix、trustSelfSigned一律以defaults為準, 防止呼叫端透過 payload 覆寫部署設定(潛在安全風險)。- Parameters:
defaults- 注入的KnoluxS3Properties,不可為null- Returns:
- 所有欄位均已填滿的新 spec
- Throws:
NullPointerException- 若defaults為nullIllegalStateException- 若 merge 後bucket或key仍為null
-