Express 全棧 Google Drive 下載器,使用 gdown CLI,支援批量下載、進度追蹤、斷點續傳與 Cookie 管理。
- ✅ 批量下載:支援多個 Google Drive 資料夾同時下載
- ✅ 並發控制:可調整並發下載數量(1-8),配置持久化保存
- ✅ 實時進度:Server-Sent Events (SSE) 推送下載進度
- ✅ 斷點續傳:支援中斷後繼續下載,不重複下載已完成檔案
- ✅ 任務管理:持久化任務狀態,服務重啟後自動恢復
- ✅ 檔案校驗:MD5/SHA256 hash 計算與驗證
- ✅ Cookie 管理:內建 Cookie 編輯器,解決 Google Drive 流量限制
- ✅ 重啟下載:一鍵重啟失敗任務,自動清除錯誤狀態
- ✅ 錯誤恢復:區分警告與錯誤,QUOTA_EXCEEDED 不會終止下載
- ✅ 自動重啟:更新 Cookie 後可自動重啟下載
- ✅ 智能進度:掃描階段與下載階段分離,進度不會過早顯示 100%
- ✅ 進度追蹤:8 種進度模式解析,精確顯示下載狀態與已跳過檔案
- ✅ 整合式 UI:Tab 設計,下載、Cookie 管理、系統設定一頁搞定
- ✅ TypeScript:完整類型定義,TSC 與 ESLint 檢查通過
- ✅ 現代 UI:響應式設計,支援桌面/平板/手機
- ✅ Docker 支援:一鍵部署,包含 Node.js + Python + gdown
- ✅ 效能優化:自動保存機制,減少 97.5% 檔案 I/O
- ✅ 配置持久化:ConfigManager 模組持久化配置,服務重啟後自動載入
- ✅ 內存優化:事件監聽器自動清理,防止內存洩漏
- 後端:Express + TypeScript
- 前端:原生 HTML/CSS/JS
- CLI 工具:gdown (Python)
- 進度推送:Server-Sent Events (SSE)
- 檔案校驗:Node.js crypto 模組
- Node.js:v18+ (建議 v22+)
- Python:v3.7+
- gdown:安裝指令
pip install gdown
npm installpip install gdownnpm run dev伺服器將在 http://localhost:3000 啟動。
# 建置並啟動容器
docker-compose up -d
# 查看日誌
docker-compose logs -f詳細說明請參考 DOCKER_DEPLOYMENT.md
- 開啟瀏覽器訪問
http://localhost:3000 - 切換到「📥 下載」頁面
- 貼上 Google Drive 資料夾連結(支援多個,一行一個)
- 點擊「開始下載」
- 即時查看下載進度與檔案列表
如果遇到 QUOTA_EXCEEDED 錯誤:
- 切換到「🍪 Cookie 管理」頁面
- 按照說明從瀏覽器複製 Cookie
- 貼上並儲存
- 系統會自動詢問是否重啟下載
如果下載失敗或卡住:
- 點擊「🔄 重啟下載」按鈕
- 系統會自動重置錯誤任務並繼續下載
- 已下載的檔案不會重複下載(斷點續傳)
google-drive-downloader/
├── src/
│ ├── index.ts # Express 主程式
│ ├── types.ts # TypeScript 類型定義
│ ├── routes/
│ │ ├── download.ts # 下載 API 路由
│ │ └── system.ts # 系統設定 API 路由
│ └── services/
│ ├── gdown.ts # gdown CLI 封裝
│ ├── fileVerify.ts # 檔案校驗模組
│ └── taskManager.ts # 任務管理模組
├── public/
│ ├── index.html # 前端頁面(整合式 Tab 設計)
│ ├── app.js # 前端邏輯
│ └── style.css # 樣式
├── downloads/ # 下載目錄(自動建立)
├── tasks.json # 任務狀態(持久化)
├── Dockerfile # Docker 映像檔定義
├── docker-compose.yml # Docker Compose 配置
├── package.json
├── tsconfig.json
└── eslint.config.js
批量下載多個 Google Drive 資料夾
Request Body:
{
"urls": [
"https://drive.google.com/drive/folders/...",
"https://drive.google.com/drive/folders/..."
],
"outputDir": "./downloads"
}Server-Sent Events 端點,推送實時進度
Event Types:
progress: 進度更新warning: 警告訊息(如 QUOTA_EXCEEDED)task_complete: 任務完成task_error: 任務錯誤
重啟所有失敗任務
取消正在進行的下載
取得當前下載狀態
取得已下載檔案列表
檢查系統環境(Python、gdown)
自動安裝 gdown
讀取 gdown cookies
儲存 gdown cookies
Request Body:
{
"content": "# Netscape HTTP Cookie File\n..."
}# 啟動開發伺服器(熱重載)
npm run dev# 建置專案
npm run build
# 啟動生產伺服器(執行建置後的檔案)
npm start# TypeScript 類型檢查
npm run type-check
# ESLint 檢查
npm run lint
# ESLint 自動修正
npm run lint:fix- 資料夾檔案數量:gdown 每個資料夾最多下載 50 個檔案
- 檔案權限:檔案需設定為「知道連結的任何人」
- 流量限制:Google 可能限制大量下載,請使用 Cookie 管理功能
當遇到 QUOTA_EXCEEDED 錯誤時:
- 在瀏覽器中登入 Google 帳號
- 訪問要下載的資料夾
- 開啟開發者工具(F12)→ Application → Cookies
- 複製所有 Cookie(格式:Netscape HTTP Cookie File)
- 在應用中切換到「Cookie 管理」頁面
- 貼上並儲存
- 系統會自動重啟下載
- Port 佔用:預設使用 port 3000,可在
src/index.ts或docker-compose.yml修改 - 磁碟空間:確保有足夠空間存放下載檔案
- 網路穩定:建議在穩定網路環境下使用
- 點擊「🔄 重啟下載」按鈕
- 檢查網路連線
- 確認 Google Drive 連結權限
- 重新整理頁面
- 檢查瀏覽器控制台是否有錯誤
- 確認 SSE 連線正常
- 確認 Python 已安裝:
python --version - 確認 gdown 已安裝:
python -m gdown --version - 使用系統設定頁面自動安裝
- 自動保存機制:每 5 秒自動保存任務狀態,減少 97.5% 檔案 I/O
- 斷點續傳:已下載的檔案不會重複下載
- 批量處理:支援多個任務同時下載
- 進度快取:進度更新僅在變化時發送
- Cookie 儲存在本地
~/.cache/gdown/cookies.txt - 不會上傳任何資料到第三方伺服器
- 所有下載都在本地進行
- ✅ 修正 SSE 寫入錯誤處理,防止斷線客戶端導致崩潰
- ✅ 修正進度顯示問題,正確解析 gdown stderr 輸出
- ✅ 修正事件監聽器洩漏,防止長期運行內存累積
- ✅ 新增 ConfigManager 模組,持久化配置(如並發下載數量)
- ✅ 修正 ConfigManager 預設值,從 8 改為 1
- ✅ 優化並發控制,支援 1-8 並發下載
- ✅ 批量下載支援
- ✅ 任務管理系統
- ✅ 斷點續傳
- ✅ Cookie 管理
- ✅ 重啟下載功能
- ✅ 整合式 Tab 設計
- ✅ Warning/Error 分離
- ✅ 自動保存機制
- ✅ Docker 部署支援
歡迎提交 Issue 或 Pull Request!
MIT License
Jay Hsu