aliyundrive-webdav One Year Later

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，主要还是满足自己的使用需求。有时候解决一些用户的问题/需求，会收获一些打赏，大部分人都是白嫖🙄。项目流行起来以后，也有了个广告合作，够一个月两杯咖啡罢了。

爱发电上赞助