Class FileDescriptor
java.lang.Object
io.leandev.appfuse.file.FileDescriptor
檔案描述符(值物件)
用於統一前後端的檔案資料格式,可嵌入 Entity 作為檔案欄位。
設計特點
- fileId 儲存識別碼(tempId 或永久 fileId)
- 包含檔案 metadata(filename, size, mimeType)
- url 是 transient 欄位,由外層動態設定
fileId 格式
- 暫存區(tempId):
yyyy-MM-dd/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - 永久區(fileId):
yyyy-MM-dd/HH/filename-shortUuid.ext
使用流程
// 1. 暫存區上傳後取得 FileDescriptor
FileDescriptor staged = FileDescriptor.ofStaging(tempId, filename, size, mimeType);
// 2. 持久化後取得新的 FileDescriptor
FileDescriptor persisted = FileDescriptor.ofPermanent(fileId, filename, size, mimeType);
// 3. 儲存到 Entity
product.setMainImage(persisted);
// 4. 讀取時設定 url
product.getMainImage().setUrl("/api/v1/products/" + product.getId() + "/image");
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptioncopy()複製一份 FileDescriptor(不含 url)copyWithUrl(String url) 複製一份 FileDescriptor(含 url)boolean取得暫存區 tempIdinthashCode()booleanisEmpty()判斷是否為空(無檔案)boolean判斷是否為永久區檔案boolean判斷是否為暫存區檔案static FileDescriptorofPermanent(String fileId, String filename, Long size, String mimeType) 建立永久區 FileDescriptorstatic FileDescriptor建立永久區 FileDescriptor(含 URL)static FileDescriptor建立暫存區 FileDescriptorstatic FileDescriptor建立暫存區 FileDescriptor(含自訂 URL)toString()設定業務端點 URL
-
Constructor Details
-
FileDescriptor
public FileDescriptor()
-
-
Method Details
-
ofStaging
建立暫存區 FileDescriptor- Parameters:
tempId- 暫存檔案 ID(格式:{date}/{uuid})filename- 原始檔案名稱size- 檔案大小mimeType- MIME 類型- Returns:
- FileDescriptor(url 指向暫存區端點)
-
ofStaging
public static FileDescriptor ofStaging(String tempId, String filename, Long size, String mimeType, String url) 建立暫存區 FileDescriptor(含自訂 URL)
用於 Presigned URL 上傳場景,url 可能是外部 S3 URL。
- Parameters:
tempId- 暫存檔案 ID(格式:{date}/{uuid})filename- 原始檔案名稱size- 檔案大小mimeType- MIME 類型url- 上傳 URL(可能是 Presigned URL 或後端 API URL)- Returns:
- FileDescriptor
-
ofPermanent
public static FileDescriptor ofPermanent(String fileId, String filename, Long size, String mimeType) 建立永久區 FileDescriptor- Parameters:
fileId- 永久檔案 ID(格式:{date}/{hour}/{filename}-{shortUuid}.{ext})filename- 原始檔案名稱size- 檔案大小mimeType- MIME 類型- Returns:
- FileDescriptor(url 需由外層設定)
-
ofPermanent
-
isStaging
public boolean isStaging()判斷是否為暫存區檔案
透過 fileId 格式判斷:暫存區的 fileId 第二段是完整 UUID(36 字元)
- Returns:
- 若為暫存區檔案則為 true
-
isPermanent
public boolean isPermanent()判斷是否為永久區檔案- Returns:
- 若為永久區檔案則為 true
-
isEmpty
public boolean isEmpty()判斷是否為空(無檔案)- Returns:
- 若 fileId 為 null 或空白則為 true
-
getTempId
-
withUrl
設定業務端點 URL
方便鏈式呼叫:
fd.withUrl("/api/v1/products/123/image")- Parameters:
url- 檔案存取 URL- Returns:
- this
-
copy
-
copyWithUrl
複製一份 FileDescriptor(含 url)- Parameters:
url- 新的 URL- Returns:
- 新的 FileDescriptor
-
equals
-
hashCode
-
toString
-