Time flies, 我的阿里云盘 WebDAV 项目马上就满一年了。
功能迭代
过去一年,断断续续地开发和维护,增加了一些新功能,这里简单盘点一下。
1、阿里云 PDS 支持
阿里云相册与网盘服务(PDS)是阿里云盘使用的底层能力,在阿里云上公开售卖,其 API 接口和阿里云盘的接口基本类似,支持起来比较简单,命令行传入 --domain-id
参数即可使用。如果有自建网盘的需求,使用这个功能可以获得接近阿里云盘的体验。
2、只读模式
WebDAV 协议支持读写,有用户反馈配置给家里长辈观看时,不知怎的把文件夹都删除了。通过增加只读模式禁止写操作,避免出现这里情况。命令行传入 --read-only
参数即可开启。
3、HTTPS 支持
基于 rustls 开发了 TLS/HTTPS 服务端支持,低端设备如路由器上可能不会专门部署一个 Nginx 来做 TLS termination,内置 HTTPS 支持方便使用。
目前还没有做自动获取比如 Let's Encrypt 的 HTTPS 证书功能,可以用 certbot 或者 acme.sh 等工具签发证书后使用。
未来一个可能有点意思的扩展是通过 Tailscale 获得私有的 tailnet 的 HTTPS 证书,将服务部署在 tailnet 中随时随地远程安全访问。
4、iOS Live Photo 下载
阿里云盘的接口没有提供原始的 iOS Live Photo (.livp
格式)下载地址,导致尝试下载此类文件时 500
错误。这个问题可能是 PDS 或者阿里云盘的锅,很难理解为什么不提供 .livp
的下载地址,其本质上只是个包含一个视频和多个图片的 zip
压缩包。
通过识别下载请求的文件格式为 .livp
然后实时下载对应的视频和图片文件,并将他们组合生成为一个新的 .livp
文件实现了 .livp
格式文件的下载的功能,不过缺点就是会丢失文件创建/修改时间的信息,对于文件同步的场景就很不友好。
5、扫码登录
一直以来都需要从阿里云盘 Web 端获取 refresh token
来完成登录授权,整个流程对小白用户来说还是过于复杂。
1.4.0
版本 @gngpp 贡献了命令行扫码登录功能,可以直接使用阿里云盘移动端 App 扫描二维码登录并自动获取 refresh token
。
而后在 1.7.1
版本中,给 OpenWrt 配置后台也增加了扫码登录功能,扫码后自动填充 refresh token
到输入框中,非常便捷
6、Checksums
WebDAV 协议一直被诟病的缺点之一是不支持 checksums,这意味着用户无法验证上传/下载文件的完整性,owncloud 增加了私有的 oc:checksums
属性扩展实现了文件完整性校验,这个扩展后来也被 Nextcloud 和 rclone 支持。
1.8.4
版本也增加了对 oc:checksums
扩展的支持,从而在通过 rclone 挂载时可以校验文件完整性。由于阿里云盘接口只返回了 sha1,目前推荐使用 rclone 的 Nextcloud WebDAV 模式,不仅可以校验下载文件的完整性,也可以自动跳过上传相同 sha1 值的文件。
项目洞察
过去一年项目在 GitHub 上获得了 4900+ 个 stars,稳定增长。
总共有 11 个代码贡献者,相对来说还是比较少的,Rust 语言的门槛相对较高。GitHub 上产生了 217 个 issues 和约 190 个讨论区主题。
GitHub 仓库每天 PV 约 1500, UV 约 600.
B 站和 YouTube 上的一些视频教程带来了不少流量,比如
Fun Facts
为什么选择 Rust 语言?
TLDR: I like it.
其实 Rust 语言标榜的内存安全、零开销抽象、fearless concurrency 等特性在这个客户端项目上并不是特别重要,你用 Java、Go、Python 来写也没毛病,实际上也确实有很多其他语言版本的实现。
Rust 对主流平台、CPU 架构的优秀的支持是这个项目流行的关键。除了常见的 x86、x86_64 架构,还支持 arm64、armv7、armv6、armv5、mips 和 mipsel 等 CPU 架构,特别是 mips 和 arm 架构在路由器上使用的很多。
能不能赚钱?
显然不能。
作为一个 side project,主要还是满足自己的使用需求。有时候解决一些用户的问题/需求,会收获一些打赏,大部分人都是白嫖🙄。项目流行起来以后,也有了个广告合作,够一个月两杯咖啡罢了。