🌐 國際化 (i18n) - 從 5 種語言擴展到 65 種語言支援 - 新增:歐洲語系 (de, fr, es, it, pt, ru, nl, pl, tr, uk, cs, sv, da, fi, no, el, hu, ro, bg, hr, sk, sl, lt, lv, et, is, ga, cy, mt, mk, sq, ca, eu, gl, sr) - 新增:中東語系 (ar, he, fa) - 新增:南亞語系 (hi, bn, ta, te, mr, gu, kn, ml, ne, si) - 新增:東南亞語系 (th, vi, id, ms, fil, my, km, lo) - 新增:非洲語系 (af, sw, am, zu) - 完整翻譯所有 UI 文字 📖 文件系統 - 重構 README.md 為入口型首頁 - 新增 docs/getting-started.md - 快速入門指南 - 新增 docs/docker.md - Docker 部署指南 - 新增 docs/environment-variables.md - 環境變數說明 - 新增 docs/url-id-and-storage.md - 儲存結構說明 - 新增 docs/advanced-usage.md - 進階使用指南 - 更新 docs/i18n.md - 65 種語言清單 ✅ 建構驗證 - TypeScript 編譯通過 - Docker 建構通過
181 lines
3.2 KiB
Markdown
181 lines
3.2 KiB
Markdown
# URL ID 與儲存機制
|
||
|
||
## 檔案儲存結構
|
||
|
||
ConvertX-CN 使用以下目錄結構儲存檔案:
|
||
|
||
```
|
||
/app/data/
|
||
├── convertx.db # SQLite 資料庫
|
||
├── uploads/ # 上傳的原始檔案
|
||
│ └── {user_id}/
|
||
│ └── {job_id}/
|
||
│ ├── file1.docx
|
||
│ └── file2.pdf
|
||
└── output/ # 轉換後的檔案
|
||
└── {user_id}/
|
||
└── {job_id}/
|
||
├── file1.pdf
|
||
└── file2.txt
|
||
```
|
||
|
||
---
|
||
|
||
## Job ID 說明
|
||
|
||
每次轉換任務都會產生一個唯一的 Job ID,用於:
|
||
|
||
- 追蹤轉換進度
|
||
- 組織檔案儲存
|
||
- 生成下載連結
|
||
|
||
### Job ID 格式
|
||
|
||
Job ID 是一個 UUID v4 格式的字串,例如:
|
||
|
||
```
|
||
550e8400-e29b-41d4-a716-446655440000
|
||
```
|
||
|
||
---
|
||
|
||
## URL 結構
|
||
|
||
### 結果頁面
|
||
|
||
```
|
||
/results/{job_id}
|
||
```
|
||
|
||
例如:
|
||
```
|
||
http://localhost:3000/results/550e8400-e29b-41d4-a716-446655440000
|
||
```
|
||
|
||
### 下載單一檔案
|
||
|
||
```
|
||
/download/{user_id}/{job_id}/{filename}
|
||
```
|
||
|
||
### 下載所有檔案(Tar)
|
||
|
||
```
|
||
/archive/{job_id}
|
||
```
|
||
|
||
---
|
||
|
||
## 資料持久化
|
||
|
||
### Docker Volume 映射
|
||
|
||
為了確保資料不會在容器重啟後遺失,請務必映射 `/app/data` 目錄:
|
||
|
||
```yaml
|
||
volumes:
|
||
- ./data:/app/data
|
||
```
|
||
|
||
或使用 Named Volume:
|
||
|
||
```yaml
|
||
volumes:
|
||
- convertx-data:/app/data
|
||
|
||
volumes:
|
||
convertx-data:
|
||
```
|
||
|
||
---
|
||
|
||
## 自動清理
|
||
|
||
ConvertX-CN 會根據 `AUTO_DELETE_EVERY_N_HOURS` 設定自動清理過期檔案。
|
||
|
||
### 清理邏輯
|
||
|
||
1. 系統每 N 小時執行一次清理
|
||
2. 刪除建立時間超過 N 小時的 Job
|
||
3. 同時刪除對應的上傳檔案和輸出檔案
|
||
4. 資料庫記錄也會被清除
|
||
|
||
### 設定範例
|
||
|
||
```yaml
|
||
# 每 24 小時清理一次
|
||
- AUTO_DELETE_EVERY_N_HOURS=24
|
||
|
||
# 每 1 小時清理一次(公開服務建議)
|
||
- AUTO_DELETE_EVERY_N_HOURS=1
|
||
|
||
# 停用自動清理
|
||
- AUTO_DELETE_EVERY_N_HOURS=0
|
||
```
|
||
|
||
---
|
||
|
||
## 資料庫
|
||
|
||
ConvertX-CN 使用 SQLite 作為資料庫,儲存於 `/app/data/convertx.db`。
|
||
|
||
### 資料表結構
|
||
|
||
#### users
|
||
|
||
| 欄位 | 類型 | 說明 |
|
||
|------|------|------|
|
||
| id | INTEGER | 使用者 ID |
|
||
| email | TEXT | 電子郵件 |
|
||
| password | TEXT | 密碼雜湊 |
|
||
|
||
#### jobs
|
||
|
||
| 欄位 | 類型 | 說明 |
|
||
|------|------|------|
|
||
| id | TEXT | Job UUID |
|
||
| user_id | INTEGER | 使用者 ID |
|
||
| num_files | INTEGER | 檔案數量 |
|
||
| date_created | TEXT | 建立時間 |
|
||
|
||
#### file_names
|
||
|
||
| 欄位 | 類型 | 說明 |
|
||
|------|------|------|
|
||
| id | INTEGER | 檔案 ID |
|
||
| job_id | TEXT | Job UUID |
|
||
| input_file_name | TEXT | 原始檔名 |
|
||
| output_file_name | TEXT | 輸出檔名 |
|
||
| status | TEXT | 轉換狀態 |
|
||
|
||
---
|
||
|
||
## 備份與還原
|
||
|
||
### 備份
|
||
|
||
```bash
|
||
# 備份整個 data 目錄
|
||
tar -czvf convertx-backup-$(date +%Y%m%d).tar.gz ./data
|
||
|
||
# 僅備份資料庫
|
||
cp ./data/convertx.db ./backup-convertx-$(date +%Y%m%d).db
|
||
```
|
||
|
||
### 還原
|
||
|
||
```bash
|
||
# 還原整個 data 目錄
|
||
tar -xzvf convertx-backup-20240101.tar.gz
|
||
|
||
# 還原資料庫
|
||
cp ./backup-convertx-20240101.db ./data/convertx.db
|
||
```
|
||
|
||
---
|
||
|
||
## 注意事項
|
||
|
||
1. **權限問題**:確保 Docker 容器有權限寫入 data 目錄
|
||
2. **磁碟空間**:大量轉換可能佔用大量磁碟空間,建議設定自動清理
|
||
3. **資料安全**:敏感文件轉換後建議手動刪除或縮短保留時間
|