在职场工作几乎都会有团队之间的文件共享需求。对于办公文档这种小体积的文件,既可以使用一些在线文档工具实现协作和共享,也可以只是通过 IM 类软件进行分享。但如果文档数量很大,一些在线工具就无法满足大量的归类检索的需要了,这时候使用文件服务器来进行存储就显得更为方便。

而在实战中,大部分的企业也多使用通过权限管理的文件服务器来实现团队内的文件共享,一方面文件服务器的在局域网内,无论是读写拷贝等几乎没有延迟,适合团队内快速的分享和编辑。再者由于基于内网环境,具有很强的安全性。最后则是其使用起来非常简单,只需要创建 SMB 文件共享后采用网络驱动器映射,就可以直接在电脑上的文件资源管理器使用,大部分现代桌面操作系统都可以使用。

但如果团队因为各种原因导致异地办公,同时也无法在搭建一个文件服务器的话,如何以更低的形式实现上述的这种团队文件共享服务呢?笔者也恰好在近期遇到了类似的需求痛点——考虑到行政人员需要经常性查找行政文档、而产品和设计团队还需要查找原先的工程文件,如何低成本的打造一个大容量的「云文件服务器」迫在眉睫。

创建一个低成本的文件共享服务

因为团队已经转为异地办公且不再租赁任何办公场地,因此原本通过文件服务器托管+ zerotier 来实现虚拟局域网组网的方案已行不通,所以我思路就转换成了先将服务器中大量的文件上传到基于公有云的网盘中,然后再想办法将其映射成网络驱动器。由于公司原本的文件服务器是 1TB 左右的空间,因此需要选择的网盘的大小大概在 1TB 以上,并且需要免费不限速的网盘服务,所以这里可选择的并不多,好在阿里云盘基本满足需要。

将本地文件上传到共有云网盘服务中

下面的操作就是简单粗暴的文件上传,因为是第一次开通阿里云盘账号,所以云盘空间只有几百 GB,对于动辄上 TB 的文件数据量显然捉襟见肘,所以这里我还通过在手机端阿里云盘 App 做任务来扩充云盘体积,最终将数据容量扩充到了 1TB,满足接下来的文件上传需要。

或许是阿里云盘的桌面客户端主要针对的是下载需求,因此我在尝试上传文件时遇到了上传时间长、跑不满上传带宽甚至卡死的情况,所以我最后还是通过第三方工具实现了完成了整个文件服务器中资料的搬运,并且完整的对应了原来文件服务器中的文档目录结构,但由于阿里云盘并不能实现单个账号多个 IP 同时登录,因此最好的办法还是映射成网络驱动器,这样就可以直接在 Windows 的文件资源管理器或者 macOS 的访达中直接访问了。因此我们还需要将阿里云盘变成可以共享文件的「网络驱动器」。

使用 webdav-aliyundriver 将阿里云盘转成 WebDAV

如果团队成员不希望安装软件来访问团队共享文件,那么最好的办法就是通过第三方工具将阿里云盘转换成可以挂载的网络驱动器,好在已经有开发者开发了相应工具:webdav-aliyundriver,可以轻松的将阿里云盘转换成 webDAV。

根据 webdav-aliyundriver 项目介绍,这款工具提供了桌面版本和 Docker 版本,而验证阿里云盘账户则依赖通过 refresh_token 来实现,这里我们先获取阿里云盘的 refresh_token——使用浏览器登录阿里云盘网页版,按 F12打开开发者工具,点击应用,在存储中定位到本地存储空间,在右侧数据栏中点选token,然后你会看到下面的refresh_token对应的字符串,去掉双引号将其保存好备用。

webdav-aliyundriver 的桌面客户端其实就是一个 jar 包,因此只要可以安装 Java 环境的桌面系统都可以支持,使用起来也非常简单,首先是系统中需要安装并配置好 Java 环境,接着我们下载安装 webdav-aliyundriver 的 jar 包并将其保存到系统目录中,然后使用终端定位到该目录并输入:

java -jar webdav-aliyundriver-2.4.2.jar --aliyundrive.refresh-token="your refreshToken"

这里ALIYUNDRIVE_REFRESH_TOKEN 后面 的 "your refreshToken" 则需要修改为前面我们获取保存的 token 值,最终我们获得了对应的 WebDaV 地址:http://127.0.0.1:8080

接下来我们需要将 WebDAV 挂载到系统中,不过由于 Windows 平台限制,我们还需要修改注册表来使得平台支持挂载 http 协议的 WebDAV。

首先我们需要打开服务,找到WebClient 选择停止

紧接着打开注册表编辑器,定位到

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters,将BasicAuthLevel的值从原来的 1改为2

然后回到服务,找到 webClient点击启动

这时候打开 Windows 的文件资源管理器,点击功能区的「添加一个网络位置」来启动添加网络位置向导。

在「指定网站的位置」这里,填入刚才生成的 WebDAV 地址并点击下一页。在弹出的身份认证中,用户名填入 admin,密码填入 admin 然后点击下一页。

如果一切顺利,你就可以在 Windows 的文件资源管理器中的「网络位置」处找到你刚刚添加的 webdav 网络驱动器了,双击打开就可以像本地硬盘一样保存、编辑、访问保存在阿里云盘的文档数据。即便是团队成员也可以同时访问并管理文件。

考虑到大部分同事桌面都没有安装 Java 环境,因此这里我选择了利用一台闲置云服务器安装 webdav-aliyundriver 的 Docker 容器,来将阿里云盘转换成 webDav 服务。

通过终端或者 SSH 客户端登录到服务器并安装 Docker,启动 Docker 之后我们需要拉取 webdav-aliyundriver 镜像并运行容器,输入:

docker run -d --name=webdav-aliyundriver --restart=always -p 6666:8080  -v /etc/localtime:/etc/localtime -v /etc/aliyun-driver/:/etc/aliyun-driver/ -e TZ="Asia/Shanghai" -e ALIYUNDRIVE_REFRESH_TOKEN="your refreshToken" -e ALIYUNDRIVE_AUTH_PASSWORD="admin" -e JAVA_OPTS="-Xmx512m" zx5253/webdav-aliyundriver

需要注意的是ALIYUNDRIVE_REFRESH_TOKEN 后面 的 "your refreshToken" 则需要修改为前面我们获取保存的 token 值。容器启动之后我们还需要在云服务器的防火墙中放行 6666 端口。

最后我们就获得了对应的 WebDAV 地址: http://云服务器 ip:6666,将其挂载到系统的方式和前面本地桌面的方式大同小异。

使用 Clouddrive 直接将网盘映射为本地磁盘

前面的一系列操作虽然可以通过生成 webdav 的方式来实现灵活的网盘加载,但依旧存在不小的限制条件——团队电脑需要安装 Java 环境或者团队拥有一台公网 IP 的云服务器来部署相关的服务,此外团队成员还需要知道如何将 WebDav 服务挂载到系统中,那么有没有更为简单的操作呢?

这里我们可以使用这款第三方服务:Clouddrive,相比将云盘转换成 WebDav 的 webdav-aliyundriver,Clouddrive 则更为简单粗暴,可以将各种云盘直接映射成本地磁盘,避免了 webDAV 挂载设置的繁琐。

首先我们需要下载 Clouddrive 的客户端,其实 Clouddrive 同时提供了 Windows 版客户端以及 Docker 镜像,不过对比测试后会发现桌面客户端使用起来要更为直观方便,安装 Windows 版客户端后打开浏览器,然后访问:http://127.0.0.1:9798 进入配置页面。

在配置页面首先会弹出登录窗口,这里没有账号可以注册一下,登录进去之后点击功能区上方的云朵图标来选择对应的网盘服务,这里我还是选择了阿里云盘。

紧接在登录框中选择云盘的登录方式,如果需要给团队成员进行部署,那么可以使用和 webdav-aliyundriver 类似的 refreshToken 来登录,如果当前手机安装了阿里云盘的 App 则可以直接扫码登录。

登录完成之后会看到阿里云盘的图标,这时候点击上方功能区的电脑图标,选择挂载到本地,你可以在这里编辑卷名称,挂载点(也就是挂载的盘符),是否在系统启动时直接挂载,然后点击「挂载」即可。

这时候你可以在文件资源管理器中找到一个新的存储卷,双击打开之后就可以看到云盘的空间,你可以随意的创建、删除、复制编辑文件,就像你在电脑本地磁盘中处理文档一样。

异地无硬件下的文件共享服务的体验如何?

每个团队的文件共享服务都有自己特殊的需求,而我们这个团队中之所以在最早的时候使用文件服务器来实现文件的共享和协作也是处于业务和成本上的考虑,比如在公司内部的资质材料等都属于涉密文件,数量大且形式多样,行政人员如果将其全部上传到公有云的云文档,一是目录结构存在不熟悉,二是文件体积大很有可能需要另外付费购买空间,而使用以上两种方法都和原先的文件管理方式类似,并且由于阿里云盘的只支持单个密钥登录,有效的解决了安全问题。

而从部署实施情况来看,我司的行政人员更习惯使用 Clouddrive 挂载的方式来进行文件管理,一是我司行政人员只会在 Windows 下访问,二是访问速度上不受制于云服务器的带宽,访问速度快。并且通过挂载到固定盘符的形式(我司的文件服务器对应的是 Z盘),可以让团队成员在共享大体积文件时,只需要将文件传到 Z 盘对应的目录中,然后直接在IM 中发送对应的路径即可。免去了传输再存储到个人电脑的麻烦。

结语

对于小型创业团队,在资金成本都有限的情况下,如何高效简单的共享大量的文件其实有很多方法,而我则根据公司实际运营情况出发,通过低成本无本地硬件的形式,通过两种不同的形式将无限速的阿里云盘转换成类似内网云服务器的形式方便团队平滑过渡并继续使用,如果你也有类似的需求不妨借鉴参考。