| 傳統檔案系統 | S3 術語 | 說明 |
| 檔案 | Object(物件) | 資料實體,含 Key、Value、Metadata |
| 資料夾 | Bucket(儲存桶) | 頂層容器,名稱全域唯一,不可巢狀 |
| 路徑 | URI | https://bucket.s3.amazonaws.com/key |
前置準備
- 註冊 AWS 帳號,取得 Access Key 與 Secret Key
- 下載 JetS3t 庫(Maven:
org.jets3t:jets3t:0.9.4)
核心操作步驟
1. 建立服務連線
AWSCredentials cred = new AWSCredentials(accessKey, secretKey);
S3Service service = new RestS3Service(cred); // 採用 REST API
2. 建立/取得 Bucket
S3Bucket bucket = service.getOrCreateBucket("my-bucket");
// 設定公開讀寫
bucket.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ_WRITE);
3. 上傳物件
S3Object obj = new S3Object(bucket, new File("/path/video.mp4"));
service.putObject(bucket, obj);
4. 產生時效簽名 URL(48 小時有效)
Date expiry = new Date(System.currentTimeMillis() + 48 * 3600 * 1000);
String url = S3Service.createSignedGetUrl(
bucket.getName(), obj.getKey(), cred, expiry);
// https://my-bucket.s3.amazonaws.com/video.mp4?AWSAccessKeyId=...&Expires=...&Signature=...
進階功能
- 列出所有 Bucket:
service.listAllBuckets()
- 設定物件 Metadata:
obj.addMetadata("x-amz-meta-author", "me")
- 指定儲存區域:建立 Bucket 時可選 US/EU,降低延遲
- 自訂網域 (CNAME):將
assets.example.com 映射至 S3 URL,隱藏基礎設施
成本與架構優勢分析
| 項目 | 自建儲存 | Amazon S3 |
| 初始投入 | 硬體採購、機房、電力 | 零,按使用付費 |
| 儲存成本 | 固定成本、利用率低 | ~$0.15/GB/月 |
| 流量成本 | 頻寬合約、尖峰擴充難 | ~$0.10/GB |
| 可用性 | 自建 HA 複雜 | 99.99% 設計,多 AZ 複本 |
| 維運負擔 | 高 | 零,全託管 |
適用場景
- 使用者上傳圖片/影音(社群、電商)
- 靜態資產分發(CDN 來源站)
- 備份/歸檔資料
- 流量不可預測的專案(新創、行銷活動)
JetS3t 封裝了底層 HTTP 細節,讓 Java 開發者以物件導向方式操作 S3,大幅降低整合門檻。配合 S3 的彈性計費與高可用特性,是現代雲原生應用儲存層的首選方案。
- 上一篇文章: Java 原始碼換行規範:提升可讀性與團隊協作的關鍵細節
- 下一篇文章: 設計模式四人幫:命令模式深度解析與 Java 實作
Copyright ©
程式碼之家 All Rights Reserved