Class FileResponseBuilder
java.lang.Object
io.leandev.appfuse.file.FileResponseBuilder
檔案下載 Response 建構器
提供統一的檔案下載回應建構,支援:
- 完整檔案下載(200 OK)
- 部分內容下載(206 Partial Content)- 支援 Range Request
- 影音串流(自動處理 Range Request)
- 斷點續傳
使用範例
@GetMapping("/products/{id}/image")
public ResponseEntity<Resource> getProductImage(
@PathVariable String id,
@RequestHeader(value = "Range", required = false) String rangeHeader) {
Product product = productService.findById(id); // 權限檢查
String tenantId = TenantContext.getCurrentTenantId();
return FileResponseBuilder.from(fileStorage, tenantId, product.getImageFileId())
.range(rangeHeader)
.build();
}
影音串流範例
@GetMapping("/videos/{id}")
public ResponseEntity<Resource> streamVideo(
@PathVariable String id,
@RequestHeader(value = "Range", required = false) String rangeHeader) {
Video video = videoService.findById(id);
String tenantId = TenantContext.getCurrentTenantId();
// 影音串流自動支援 Range Request,讓用戶可以拖動進度條
return FileResponseBuilder.from(fileStorage, tenantId, video.getFileId())
.range(rangeHeader)
.build();
}
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionorg.springframework.http.ResponseEntity<org.springframework.core.io.Resource> build()建構 ResponseEntity設定下載時的檔名強制下載(而非在瀏覽器中開啟)static FileResponseBuilderfrom(FileStorage fileStorage, String tenantId, String fileId) 建立 FileResponseBuilder設定 Range header(支援部分內容下載)
-
Method Details
-
from
建立 FileResponseBuilder- Parameters:
fileStorage- FileStorage 實例tenantId- 租戶 IDfileId- 檔案 ID- Returns:
- FileResponseBuilder 實例
-
range
設定 Range header(支援部分內容下載)- Parameters:
rangeHeader- HTTP Range header 值(如 "bytes=0-1000"),可為 null- Returns:
- this
-
filename
設定下載時的檔名
若不設定,會使用檔案的原始檔名。
- Parameters:
filename- 下載時顯示的檔名- Returns:
- this
-
forceDownload
強制下載(而非在瀏覽器中開啟)
設定 Content-Disposition: attachment,讓瀏覽器下載檔案而非直接開啟。
- Returns:
- this
-
build
public org.springframework.http.ResponseEntity<org.springframework.core.io.Resource> build()建構 ResponseEntity
根據 Range header 決定回應類型:
- 無 Range header → 200 OK(完整檔案)
- 有效的 Range header → 206 Partial Content(部分內容)
- 檔案不存在 → 404 Not Found
- Returns:
- ResponseEntity
-