{"id":45436179,"url":"https://github.com/xiaoxusheng/go-auto-uploader","last_synced_at":"2026-04-17T04:00:44.875Z","repository":{"id":339019088,"uuid":"1160031394","full_name":"Xiaoxusheng/go-auto-uploader","owner":"Xiaoxusheng","description":"对接openlist 和ihmily/DouyinLiveRecorder录制视频的直播录制管理web面板，也提供内置的录制功能","archived":false,"fork":false,"pushed_at":"2026-04-07T05:45:26.000Z","size":6489,"stargazers_count":8,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-07T07:23:46.628Z","etag":null,"topics":["douyinliverecorder","go","openlist"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Xiaoxusheng.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-17T13:11:51.000Z","updated_at":"2026-04-07T05:45:31.000Z","dependencies_parsed_at":"2026-04-17T04:00:37.921Z","dependency_job_id":null,"html_url":"https://github.com/Xiaoxusheng/go-auto-uploader","commit_stats":null,"previous_names":["xiaoxusheng/go-auto-uploader"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/Xiaoxusheng/go-auto-uploader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xiaoxusheng%2Fgo-auto-uploader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xiaoxusheng%2Fgo-auto-uploader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xiaoxusheng%2Fgo-auto-uploader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xiaoxusheng%2Fgo-auto-uploader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Xiaoxusheng","download_url":"https://codeload.github.com/Xiaoxusheng/go-auto-uploader/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xiaoxusheng%2Fgo-auto-uploader/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31914458,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["douyinliverecorder","go","openlist"],"created_at":"2026-02-22T03:03:30.700Z","updated_at":"2026-04-17T04:00:44.862Z","avatar_url":"https://github.com/Xiaoxusheng.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003cdiv align=\"center\"\u003e\n\n# 🚀 Go Auto Uploader\n\n**高性能分布式自动文件上传与监控系统**\n\n[🌟 项目 GitHub 仓库](https://github.com/Xiaoxusheng/go-auto-uploader) \u0026nbsp; | \u0026nbsp; [📝 查看更新日志 (Changelog)](CHANGELOG.md)\n\n\u003c/div\u003e\n\n## 📖 项目简介\n\n**Go Auto Uploader** 是一款基于 Golang 和 Vue 3 打造的轻量级、高性能自动化文件监控与上传引擎。专为需要 7x24 小时无人值守、将本地大批量文件（如直播录像、监控视频、日志备份等）稳定同步至远端服务器的场景而设计。\n\n**🤝 开源生态强强联手**：本项目天生为流媒体录制与云端归档而打造，原生深度对接了 **[ihmily/DouyinLiveRecorder](https://github.com/ihmily/DouyinLiveRecorder)**（知名开源直播录制引擎）与 **[OpenList](https://github.com/OpenListTeam/OpenList)**（开源多云端存储文件管理系统）两大开源巨头。它作为核心的“智能中枢”，完美串联了从“全自动开播录制”到“全自动多云盘归档”的完整工作流闭环。\n\n系统不仅拥有强大的底层并发调度和流量控制能力，还内置了一个极具现代感的 **Apple 级毛玻璃 (Glassmorphism)** 响应式 Web 控制台。只需一个编译后的独立二进制文件，即可完成全部部署，无需额外部署 Nginx 或前端环境。\n\n## ✨ 核心特性\n\n### 🔗 双引擎与生态深度联动 (Dual-Engine Integration)\n\n本项目采用创新的 **“双引擎驱动 (Dual-Engine)”** 架构，既能完美驾驭外部重型生态，又拥有独立的轻量级内建能力：\n\n* **🎥 完美驾驭外置 DouyinLiveRecorder**:\n  * **容器级可视化守护**：支持在 Web 控制台直接实时探测录制引擎 Docker 容器的运行状态，并提供一键启停、重启、物理终端日志实时拉取功能。\n  * **名单与凭证热穿透**：独创无损 INI 精准覆写算法。在网页端即可随时批量增删主播录制名单 (`URL_config.ini`)，或动态注入多平台 Cookie (`config.ini`)，彻底告别繁琐的 SSH 文本编辑。\n* **🎙️ 内置极速轻量录制引擎 (Built-in Recorder)**:\n  * **开箱即用**：无需部署外部 Docker 容器，系统原生内置对主流直播平台的监听与录制支持，依托轻量级 FFmpeg 进程调度，极大降低系统内存占用。\n  * **底层热重载与自动固化**：修改底层物理文件 `urls.txt`，3秒内毫秒级感知并热推送到所有设备的 Web 端；抓取到的主播名称自动固化写入物理文件，重启永不丢失。\n  * **智能中断唤醒**：内置引擎一旦捕获到主播开播，将立刻下发硬件级中断信号，瞬间“踹醒”处于休眠状态的上传扫描调度器，极速切入狂暴上传模式。\n* **☁️ 无缝对接 OpenList (及 AList 生态)**:\n  * **API 直连聚合存储**：全面对接 OpenList 远端服务器 API，将录制好的庞大视频文件稳定、高速地推送到阿里云盘、115网盘、OneDrive 等数十种被挂载的云存储节点。\n  * **动态鉴权与心跳保护**：系统支持配置 OpenList 的远端认证账号密码，自动完成 API 鉴权、Token 获取与定期的强制刷新，保障 7x24 小时跨云传输的绝对稳定。\n\n### ⚙️ 高性能核心引擎\n\n* **📦 单文件极简部署**：依托 Go 的 `//go:embed` 特性，Web 前端被无缝打包入二进制文件中，开箱即用，极度轻量。\n* **⚡ 智能哈希碰撞与秒传**：内置 SHA-256 文件指纹校验与本地 Hash 缓存机制，自动跳过远端已存在的文件，大幅降低带宽损耗。\n* **🎛️ 流式动态流量控制**：支持**白班/夜间双模式智能限速**。基于底层字节流 (`io.Reader`) 拦截限速，保证主干网络在工作时间的稳定性。\n* **🔥 无宕机热更新**：采用 Channel 信号量打断机制，在 Web 端修改并发数、扫描间隔等核心参数后，系统会自动重载配置并即刻生效，无需重启进程。\n\n### 🔐 商业级数据安全 (Enterprise-Grade Security)\n\n* **🛡️ 动态 RSA+AES 混合加密**：引入基于 RSA-2048 和 AES-256-GCM 的完美前向保密 (PFS) 动态密钥交换机制。前端每次加载自动换取专属 SessionID 与 AES 临时密钥，对 API 传输载荷进行全链路端到端加密，彻底防止中间人 (MITM) 抓包窃听与重放攻击。\n* **🔌 无感加解密拦截器**：重构前后端网络层与 Axios 拦截器，自动完成 JSON 结构体到 Base64 密文的装箱与拆箱，对上层业务代码实现 100% 零侵入透明兼容。\n* **🎛️ 可视化加密开关**：在前端“上传参数”设置面板中提供 API 加密通信热开关。可随时在明文调试与密文安全模式间无缝动态切换，兼顾极客开发与生产环境的高强度安全需求。\n\n### 💻 现代化 Web 控制台\n\n* **🎨 极客美学 UI**：采用 Arco Design Vue 深度定制，支持跟随系统时间自动切换的**日间 / 暗黑模式 (Dark Mode)**，以及全局平滑毛玻璃渲染引擎。配合严格的防折行保护机制与动态字号自适应缩放引擎，完美适配各种尺寸的屏幕。\n* **📡 WebSocket 实时追踪**：通过全双工 WebSocket 通道，毫秒级同步各个上传工作流的瞬时速度、进度及历史耗时。\n* **📊 动态可视化大屏**：集成 ECharts，实时渲染全站流量趋势、硬盘消耗排行及整体任务分布状态。\n* **💽 全局硬件资源监控**：底层引擎全面接入 `gopsutil` 系统级探针，毫秒级实时计算并下发系统磁盘剩余可用空间（Disk Free）与底层 FFmpeg 录制进程物理内存占用（RSS Memory），彻底告别“盲盒式”录制。\n* **🖥️ Web 终端全量投射**：独创的 `logInterceptor` 机制，将后端标准控制台输出拦截并清洗后，实时投射至前端页面，支持多条件检索与分页查阅，并提供 `.log` 格式一键导出。\n\n### 🛡️ 自动化与健壮性保障\n\n* **📧 自动化数据邮件推送**：内置 SMTP 服务，根据设定的周期合并发送精美的 HTML 格式流量统计与成功上传报告。\n* **🔄 优雅的错误恢复**：支持针对特定网络异常导致的任务失败进行一键重试及队列干预。\n\n---\n\n## 📸 界面预览\n\n*以下为系统在实际运行中的界面截图：*\n\n\u003ctable border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width: 100%\"\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cimg src=\"img/1.png\" alt=\"登录\" width=\"100%\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"img/2.png\" alt=\"主页面\" width=\"100%\" /\u003e\u003c/td\u003e \n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cimg src=\"img/3.png\" alt=\"日志页面\" width=\"100%\" /\u003e\u003c/td\u003e\n           \u003ctd\u003e\u003cimg src=\"img/4.png\" alt=\"配置页面\" width=\"100%\" /\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n     \u003ctr\u003e\n            \u003ctd\u003e\u003cimg src=\"img/5.png\" alt=\"上传成功页面\" width=\"100%\" /\u003e\u003c/td\u003e\n           \u003ctd\u003e\u003cimg src=\"img/6.png\" alt=\"历史记录页面\" width=\"100%\" /\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n     \u003ctr\u003e\n            \u003ctd\u003e\u003cimg src=\"img/7.png\" alt=\"主播设置页面\" width=\"100%\" /\u003e\u003c/td\u003e\n           \u003ctd\u003e\u003cimg src=\"img/8.png\" alt=\"cookie设置页面\" width=\"100%\" /\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n---\n\n## 📡 WebSocket 实时数据协议规范\n\n系统通过单路全双工 WebSocket (`/ws/live`) 向前端实时推送业务数据。所有消息均采用 JSON 格式，结构为 `{ \"type\": \"类型\", \"payload\": 载荷数据 }`。\n\n### 📊 1. 大屏看板与统计数据\n\n**全站流量与排行榜 (`type: \"statsTrend\"`)**\n驱动近7日流量增长面积图与硬盘消耗 TOP 5 排名。\n```json\n{\n  \"type\": \"statsTrend\",\n  \"payload\": {\n    \"rank\": [\n      { \"name\": \"KingKing\", \"size\": 3.123 },\n      { \"name\": \"小毛毛芋头\", \"size\": 2.369 }\n    ],\n    \"trend\": [\n      { \"date\": \"02-23\", \"size\": 0, \"count\": 0 },\n      { \"date\": \"02-24\", \"size\": 17.458, \"count\": 66 }\n    ]\n  }\n}\n```\n\n**瞬时网络速率 (`type: \"trafficMetrics\"`)**\n实时展示系统的瞬时上传带宽消耗，每 2~3 秒推送。\n\n```json\n{\n  \"type\": \"trafficMetrics\",\n  \"payload\": {\n    \"speed\": 52028120, // 字节每秒 (Bytes/s)\n    \"time\": 1708765432000\n  }\n}\n```\n\n**队列分布状态 (`type: \"queueStatus\"`)**\n驱动任务分布饼图，统计当前各类任务的实时数量。\n\n```json\n{\n  \"type\": \"queueStatus\",\n  \"payload\": {\n    \"waiting\": 5,\n    \"uploading\": 2,\n    \"success\": 120,\n    \"failed\": 0\n  }\n}\n```\n\n### ⚡ 2. 任务流与进度追踪\n\n**实时上传进度 (`type: \"uploadProgress\"`)**\n高频推送，驱动上传任务列表的进度条与速度显示。\n\n```json\n{\n  \"type\": \"uploadProgress\",\n  \"payload\": {\n    \"id\": \"task-1708765432\",\n    \"filename\": \"streamer_20260224.mp4\",\n    \"path\": \"D:\\\\Record\\\\streamer_20260224.mp4\",\n    \"size\": 1073741824,\n    \"uploaded\": 536870912,\n    \"speed\": 10485760,\n    \"status\": \"uploading\",\n    \"startTime\": 1708765000000\n  }\n}\n```\n\n**任务完成通知 (`type: \"taskDone\"`)**\n当单个任务成功上传或遭遇错误失败时触发。\n\n```json\n{\n  \"type\": \"taskDone\",\n  \"payload\": {\n    \"id\": \"task-1708765432\",\n    \"status\": \"success\", // 或 \"fail\"\n    \"progress\": 100,\n    \"size\": 1073741824,\n    \"error\": \"Token expired\" // 仅失败时存在\n  }\n}\n```\n\n### 🚀 3. 系统调度与控制\n\n**系统核心状态 (`type: \"systemStatus\"`)**\n包含全局雷达倒计时、动态休眠时间、目录统计情况以及硬件资源探针数据。\n\n```json\n{\n  \"type\": \"systemStatus\",\n  \"payload\": {\n    \"running\": true,\n    \"workers\": 3,\n    \"scanningInterval\": 30,\n    \"dynamicInterval\": 5, // 动态调节后的频率\n    \"nextScanTime\": 1708765900000,\n    \"uptime\": 3600,\n    \"diskFree\": 52684820480, // 系统可用磁盘空间 (Bytes)\n    \"ffmpegMem\": 24560000,   // FFmpeg进程内存消耗 (Bytes)\n    \"dirs\": [\n      {\n        \"path\": \"D:\\\\Record\",\n        \"pendingFiles\": 5,\n        \"uploadedFiles\": 100,\n        \"totalSize\": 10737418240,\n        \"uploadedSize\": 5368709120\n      }\n    ]\n  }\n}\n```\n\n**扫描启动事件 (`type: \"scanStarted\"`)**\n当引擎开始探测目录时触发（前端可借此弹出提示）。\n\n```json\n{\n  \"type\": \"scanStarted\",\n  \"payload\": {\n    \"time\": 1708765000000,\n    \"dirs\": [\"D:\\\\Record\"],\n    \"interval\": 5,\n    \"workers\": 3,\n    \"trigger\": \"auto\" // auto, manual-start, rescan, config-change\n  }\n}\n```\n\n**扫描完毕事件 (`type: \"scanFinished\"`)**\n当引擎完成目录比对后触发，告知发现了多少新文件。\n\n```json\n{\n  \"type\": \"scanFinished\",\n  \"payload\": {\n    \"time\": 1708765100000,\n    \"added\": 12 // 压入队列的新文件数量\n  }\n}\n```\n\n### 🎥 4. 直播引擎生态联动\n\n**录制引擎容器状态 (`type: \"recorderStatus\"`)**\n实时投射底层 Docker 容器的状态。\n\n```json\n{\n  \"type\": \"recorderStatus\",\n  \"payload\": \"running\" // running, exited, 离线/异常 等\n}\n```\n\n**热点录制主播探测 (`type: \"activeStreamers\"`)**\n动态识别正在写入视频文件的主播，前端借此展示“录制红点”。\n\n```json\n{\n  \"type\": \"activeStreamers\",\n  \"payload\": [\"KingKing\", \"小毛毛芋头\"]\n}\n```\n\n**主播配置名单同步 (`type: \"streamersData\"`)**\n向所有在线终端同步最新的录制名单数据（防冲突覆盖）。\n\n```json\n{\n  \"type\": \"streamersData\",\n  \"payload\": [\n    { \"name\": \"KingKing\", \"url\": \"[https://live.douyin.com/123](https://live.douyin.com/123)\", \"active\": true },\n    { \"name\": \"未知\", \"url\": \"[https://live.kuaishou.com/456](https://live.kuaishou.com/456)\", \"active\": false }\n  ]\n}\n```\n\n### 🚨 5. 诊断与告警\n\n**系统实时终端日志 (`type: \"newLog\"`)**\n拦截 Go 后端标准输出，实时推送给前端日志查看器。\n\n```json\n{\n  \"type\": \"newLog\",\n  \"payload\": {\n    \"Time\": \"15:04:05\",\n    \"Level\": \"info\", // info, warn, error\n    \"Message\": \"系统初始化完成，启动中...\",\n    \"Error\": \"\"\n  }\n}\n```\n\n**全局告警强推 (`type: \"systemAlert\"`)**\n遇到致命错误（如认证失效、API拒绝）时主动触发弹窗。\n\n```json\n{\n  \"type\": \"systemAlert\",\n  \"payload\": {\n    \"level\": \"error\", // info, success, warning, error\n    \"title\": \"上传遭拒绝\",\n    \"message\": \"远端返回 Code 401，请检查 Token 是否已过期。\",\n    \"time\": \"15:04:05\"\n  }\n}\n```\n\n---\n\n## 🛠️ 技术架构\n\n* **Backend (服务端)**: Go (原生 `net/http`, `sync` 协程调度), Gorilla WebSocket。\n* **Frontend (前端 UI)**: Vue.js 3 (Composition API), Arco Design Vue, ECharts, Axios。\n* **Data (数据持久化)**: 轻量级本地 `.db` 文件存储 Hash 与成功记录，无外部数据库依赖。\n\n---\n\n## 🚀 快速开始\n\n### 1. 环境准备与编译\n\n请确保你的本地环境已安装 [Go 1.20+](https://go.dev/dl/)。\n\n```bash\n# 克隆项目到本地\ngit clone [https://github.com/Xiaoxusheng/go-auto-uploader.git](https://github.com/Xiaoxusheng/go-auto-uploader.git)\ncd go-auto-uploader\n\n# 解决依赖\ngo mod tidy\n\n# 编译为可执行文件 (前端 HTML 会被自动 embed 打包)\n# Windows 平台:\ngo build -o uploader.exe .\n\n# Linux / macOS 平台:\ngo build -o uploader .\n```\n\n### 2. 启动服务\n\n系统可通过命令行参数进行初始化配置（所有的配置均可在启动后的 Web 页面中**随时进行热修改**）。\n\n```bash\n./uploader -dirs \"D:\\录像文件夹, E:\\LiveRecord\" -workers 3 -day-rate 20 -night-rate 80 -web-port 8080\n```\n\n#### 详细参数说明表：\n\n| 参数标志 | 默认值 | 类型 | 说明 |\n| --- | --- | --- | --- |\n| `-dirs` | *(必填)* | `string` | 需要监听扫描的本地绝对路径（多目录请用英文逗号 `,` 分隔）。 |\n| `-server` | `https://wustwust.cn:8081` | `string` | 远端 OpenList 接收服务器的 API Endpoint 地址。 |\n| `-workers` | `3` | `int` | 核心并发上传的线程数（Worker 数量）。 |\n| `-rate` | `0` | `int` | 全天候强制最大上传限速（单位 MB/s，设为 0 则不启用）。 |\n| `-day-rate` | `20` | `int` | 日间时段 (08:00 - 23:00) 最大上传限速（单位 MB/s）。 |\n| `-night-rate` | `80` | `int` | 夜间时段 (23:00 - 08:00) 最大上传限速（单位 MB/s）。 |\n| `-scan-interval` | `30` | `int` | 自动执行目录扫描的循环间隔（单位：分钟）。 |\n| `-report-minutes` | `360` | `int` | 定时向管理员邮箱发送统计报告的间隔（单位：分钟）。 |\n| `-web-port` | `8080` | `int` | 本地 Web 监控面板的监听端口。 |\n\n### 3. 访问控制台\n\n程序启动成功后，浏览器访问：[http://127.0.0.1:8080](http://127.0.0.1:8080)\n\n* 🔐 **默认账号**: `admin`\n* 🔐 **默认密码**: `admin`\n\n---\n\n## ⚙️ RESTful API 规范\n\n若需接入第三方监控或企业内部 CI/CD 流程，你可以直接调用系统提供的标准化 API。API 默认受 Bearer Token 保护（在 `/api/v1/auth/login` 接口获取）。\n\n* **获取当前系统参数**：`GET /api/v1/config`\n* **热更新系统参数**：`PUT /api/v1/config`\n* **获取实时系统与目录状态**：`GET /api/v1/status`\n* **获取实时上传流数据**：`GET /api/v1/tasks/live`\n* **拉取系统控制台日志**：`GET /api/v1/logs?page=1\u0026limit=50`\n* **下发队列控制指令**：`POST /api/v1/control/[action]`\n  *(支持的 action: `start`, `pause`, `stop`, `rescan`, `clear-fail-queue` 等)*\n\n*(注：系统默认开启动态混合加密机制，调用此类受保护 API 请参考无感拦截器封装格式)*\n\n---\n\n## 🤝 参与贡献\n\n我们非常欢迎所有的 Issue 和 Pull Request！如果你有好的想法、发现了 Bug，或是想为前端 UI 添加新的主题，请随时向仓库提交代码。\n\n## 📜 许可证 \u0026 版权声明\n\n该项目采用 Apache License 开源许可证。\n\n**© 2026 Lei. All Rights Reserved.**\n\n感谢你的关注与支持，欢迎在 GitHub 上为本项目点亮 🌟 Star！\n\n## ⚠️ 免责声明\n\n本工具仅供个人学习、技术研究与自动化测试使用。请勿将录制的视频用于商业用途或侵犯他人知识产权。使用本工具所产生的一切法律及相关后果由使用者自行承担。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxiaoxusheng%2Fgo-auto-uploader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxiaoxusheng%2Fgo-auto-uploader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxiaoxusheng%2Fgo-auto-uploader/lists"}