我开源了一个家庭备份工具:把手机照片和视频,存回自己的电脑

0 阅读9分钟

一台 Windows 电脑,一部 Android 手机,在家里的网络中备份照片、视频和文件。支持断点续传、完整性校验、网页浏览和图集整理,源码与完整部署包均已公开。

手机里的照片和视频,总是在不知不觉中越积越多。

孩子成长的录像、家人聚会的合影、旅行时随手拍下的风景,还有平时保存的文档和录音。拍的时候很方便,到了换手机、整理空间时,才发现把这些资料妥善存下来,也需要花些心思。

我想做一个自己用起来顺手的小工具:手机连接家里的网络,就能把需要保留的文件备份到自己的电脑,并且方便查看和整理。

于是就有了 lw.HomeNAS。

现在,这个项目已经开源,完整部署包也已通过自动构建流程发布到 GitHub Releases。普通用户可以下载体验,感兴趣的开发者也可以直接看源码。

一台电脑,加一部手机

lw.HomeNAS 当前主要面向 Windows 10/11 x64 电脑 + Android 手机 的家庭局域网使用场景。

电脑负责保存文件、管理账号和提供网页;手机负责选择照片、视频及其他文件,执行备份任务。电脑浏览器也能直接上传文件、查看资料库。

你可以把它用在日常家庭备份,也可以拿来整理个人照片、学习资料、工作文档和录音。备份过程由手机与自己的电脑直接传输,无需接入第三方云存储。

不需要自己搭建 Python 环境,也不需要安装 Android 开发工具。下载完整部署包和 APK,就可以开始体验。

备份之前,先知道自己选了什么

手机端可以按日期浏览照片和视频,逐项选择,也可以按天选择。界面会显示已备份、待备份、已入队、待核实等状态,帮助你判断哪些资料还需要处理。

例如,周末带家人出去玩,拍了一批照片。回到家后,打开软件,选择当天需要保留的内容,加入备份队列即可。

除了照片和视频,也可以通过“选择其他文件”,手动加入文档、录音等资料。

图片

手机按日期选择照片和视频

手机界面预览,使用演示图片和状态数据。

完成相册授权后,还可以选择需要扫描的相册,配置网络、充电等条件,开启定时备份。Android 的后台调度会受到省电策略和厂商限制影响,实际执行时机以手机系统为准;如果只授予了部分照片权限,软件也只会处理授权范围内的内容。

上传中断了,可以接着传

备份视频时,传到一半断网,往往比等待本身更让人头疼。

所以,这个项目把 分块上传、任务持久化和断点续传 放在了比较核心的位置。

手机会保存备份队列,电脑会记录已经确认接收的位置。任务中断后,可以重新打开应用、恢复连接,再继续处理未完成的内容。

传输结束后,服务器还要检查文件大小和完整 SHA256 摘要。只有服务器确认文件已经完成校验并入库,手机才会显示“已备份”。

对于相同内容的文件,服务器可以复用已有原件;同名但内容不同的文件,也会分别保留。

界面提供当前文件进度、传输阶段、上传速度、暂停和重试入口。实际速度取决于电脑磁盘、手机性能和局域网环境。

存下来之后,还要方便找

照片备份到电脑,下一步自然是浏览和整理。

现在,Web 和 APK 的资料库都提供  “时间线 / 图集”  两种展示方式。

时间线按文件时间分组,适合顺着日期翻看;当前采用文件修改时间,缺少有效时间时再回退到入库时间。

图集则适合按主题整理,比如:

  • 家人的生日与聚会。
  • 一次旅行的照片和录像。
  • 孩子的绘画、作品与成长记录。
  • 项目现场照片或活动资料。

你可以新建图集、填写说明、批量加入照片与视频,也可以设置封面、移出成员或删除图集。照片多时,列表会分页加载。

图片

电脑网页中的图集详情

Web 图集功能截图,使用合成示例图片。

这里有一个我比较在意的设计:图集保存的是文件的关联关系。

同一张照片可以出现在多个图集中,不需要因此再复制几份文件。把照片移出图集,或者删除整个图集,服务器上已保存的原件仍然保留,也仍然可以在时间线中找到。

预览、下载,也照顾到了

资料库支持照片预览、视频封面和原件下载。

Web 图片详情里,可以查看文件名、大小、尺寸、文件时间,以及原图中能够读取的 EXIF 拍摄信息;缺失的字段会标明未提供。

图片

网页中的图片与拍摄信息

元数据功能截图,使用专门生成的测试图片和示例拍摄参数。

视频封面通过随包提供的 FFmpeg 提取,方便先认出文件内容。视频能否直接播放,仍取决于浏览器、手机及其支持的编码;封面生成并不等于完成了视频转码。

手机端也可以将资料库中的原件保存到自己选择的位置。

几步就能开始使用

1. 下载完整部署包

打开项目的 GitHub Releases 页面(github.com/lxw112190/l…

写这篇文章时,公开版本为 ci-15 预发布版(github.com/lxw112190/l… / code10`。页面同时提供独立 APK 和 SHA256 校验文件,后续版本以 Releases 页面为准。

2. 在电脑上启动

把完整 ZIP 解压到一个可写目录,保留目录结构。

首次部署先运行:

deploy/import_android.bat

它会把随包 APK 导入到网页下载入口。然后运行程序目录里的:

启动服务.cmd

在电脑浏览器中打开:

http://127.0.0.1:8787/

完整部署包首次创建的管理员账号是 admin,初始密码是 admin123。登录后请先修改密码。

3. 手机连接自己的电脑

手机与电脑连接到可互访的家庭局域网,在网页登录页下载 APK 并安装,也可以使用 Releases 中的独立 APK。

在手机连接设置中,填写电脑实际的局域网地址。例如,电脑 IP 是 192.168.1.20,则填写:

设置项示例
协议HTTP
电脑地址192.168.1.20
端口8787

先测试连接,再用账号和密码登录。如果电脑端口受到防火墙限制,部署目录中也提供了相应的防火墙操作脚本。

默认 HTTP 连接适合在受信任的家庭内网体验,传输本身不加密;项目同时保留 HTTPS 支持。对外访问需要另外配置 HTTPS 和访问控制。

4. 先完成一小批备份

先选择几张照片和一个视频,完成上传、预览和下载,确认保存位置与内容符合预期,再处理大批文件。

电脑需要保持开机、服务运行,手机才能继续上传。也可以使用 deploy 目录下的脚本安装为 Windows 服务,让电脑启动后自动运行。

当前版本处于预发布阶段。重要资料建议再保留一份到另一块硬盘;升级软件时保留原有的 config 和 data 目录。

给开发者:这个项目里有哪些值得研究的地方

后台使用 C++17 + cpp-httplib 提供 HTTP 接口,使用 SQLite 保存账号、文件目录、上传任务和图集关联,电脑端通过 Web 页面管理。

Android 界面使用 HTML、CSS 和 JavaScript,相册读取、文件传输、本机任务队列和后台调度则放在 Java 原生层。

一次备份大致会经过下面这些步骤:

选择文件 → 加入本机队列 → 计算摘要 → 分块传输
        → 服务器校验大小和摘要 → 入库 → 显示已备份

大文件通过有界缓冲区流式传输,任务进度持久化到数据库。图片缩略图由 Windows WIC 处理,视频封面交给 FFmpeg;图集通过数据库关联复用原件。

账号提供管理员、普通用户和只读用户三种角色。当前资料库面向家庭共享,权限控制的是操作能力,暂不提供个人照片空间隔离。

项目也补上了自动发布流程:Android 构建和模拟器检查通过后,再构建 Windows 程序、验收完整 ZIP,最后把部署包、APK 和校验文件发布到 GitHub Releases。APK 沿用固定签名,后续按递增版本号维护。

如果你正在学习 C++ HTTP 服务、Android 原生与 Web 界面协作、SQLite 任务队列,或者断点续传和完整性校验,这个项目可以作为一个具体的实践案例。

下载与交流

lw.HomeNAS 想做的事情很朴素:让手机里的重要文件,在自己的电脑上多留一份,并且方便浏览和整理。

源码、构建脚本、使用说明和部署包都已经公开。欢迎下载体验,也欢迎通过 Issue 提交问题,或者一起完善功能。

项目源码:  github.com/lxw112190/lw.HomeNAS(github.com/lxw112190/l…

部署包下载:  GitHub Releases(github.com/lxw112190/l…

交流QQ群:天天代码码天天(264292622)

如果这个小工具对你有帮助,欢迎点个 Star,也欢迎分享给同样需要整理和备份资料的朋友。