通过webdav协议挂载阿里云盘到本地(转载)

通过webdav协议挂载阿里云盘到本地

什么是webdav协议

WebDAV 基于 HTTP 协议的通信协议,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。因为基于HTTP,在广域网上共享文件有天然的优势,移动端文件管理APP也大多支持WebDAV协议。使用HTTPS还能保安全性。Apache和Nginx支持WebDAV,可作为WebDAV文件共享服务器软件。也可以使用专门的WebDAV软件部署。

可以认为通过webdav,我们可以直接将云盘挂载到本地,不需要使用服务商提供的专门软件就能进行管理使用。目前国内支持的最好的就是坚果云了,自身就支持webdav,但是坚果云免费的限制流量。阿里云盘明面上不支持,但是通过搭建 webdav-aliyundriver 项目,来代理转发请求,实现阿里云盘支持webdav协议。

流程梳理

本篇将会讲解如下

  • 搭建webdav-aliyundriver
  • windows通过Raidrive挂载阿里云盘
  • Linux通过Rclone 挂载阿里云盘

教程内容

搭建 webdav-aliyundriver

阿里云盘自身是不支持webdav协议的,所以我们需要一个中转,接收webdav协议,然后再将webdav协议转换为HTTP请求发送给阿里云盘,以此来模拟阿里云盘支持webdav。而这个中转,就是 webdav-aliyundriver 。更多的介绍使用和搭建方式可以参考项目的readme

启动

我们通过在ubuntu20 (ip:192.168.137.200)上使用docker 快速启动一个webdav-aliyundriver

docker run -d --name=webdav-aliyundriver --restart=always -p 9090:8080  -v /etc/localtime:/etc/localtime -v /etc/aliyun-driver/:/etc/aliyun-driver/ -e TZ="Asia/Shanghai" -e ALIYUNDRIVE_REFRESH_TOKEN="下面有获取方式"  -e ALIYUNDRIVE_AUTH_PASSWORD="admin" -e JAVA_OPTS="-Xmx1g" zx5253/webdav-aliyundriver

注意:我将宿主机端口映射为9090,也就是后面的client想要连接该server,端口修改为9090

参数说明

--aliyundrive.refresh-token
    阿里云盘的refreshToken,获取方式见下文
--server.port
    非必填,服务器端口号,默认为8080
--aliyundrive.auth.enable=true
    是否开启WebDav账户验证,默认开启
--aliyundrive.auth.user-name=admin
    WebDav账户,默认admin
--aliyundrive.auth.password=admin
    WebDav密码,默认admin
--aliyundrive.work-dir=/etc/aliyun-driver/
    token挂载路径(如果多开的话,需修改此配置)

浏览器获取refreshToken方式

  1. 先通过浏览器(建议chrome)打开阿里云盘官网并登录:https://www.aliyundrive.com/drive/
  2. 登录成功后,按F12打开开发者工具,点击Application,点击Local Storage,点击 Local Storage下的 https://www.aliyundrive.com/,点击右边的token,此时可以看到里面的数据,其中就有refresh_token,把其值复制出来即可。(格式为小写字母和数字,不要复制双引号。例子:ca6bf2175d73as2188efg81f87e55f11
  3. 第二步有点繁琐,大家结合下面的截图就看懂了

image

信息整理

容器正常跑起来后,意味着webdav server 已经成功搭建了。连接webdav server 的信息如下(上面启动容器时的参数决定的)

ip 端口 账号 密码
192.168.137.200 9090 admin admin

请确认要连接 webdav server的客户端所在主机能正常与 192.168.137.200 通信

连接webdav server

现在我们可以先到阿里云盘的网页或者客户端上,在顶级目录下创建一个名为webdav_test的文件夹,作为接下来的讲解案例使用

image

windows通过Raidrive挂载阿里云盘

webdav-aliyundriver 对Windows原生自带的添加网络设备兼容不够好,存在问题,所以需要安装第三方,也就是Raidrive 作为客户端。下载地址:https://cloud.189.cn/t/fiy2immmIbIn(访问码:ypc2

Raidrive安装完毕后,点击Add,然后如下配置

image

这里的path如果不填写,则默认就是挂载阿里云盘的顶级目录。如果填写/webdav_test ,则是挂载我们刚刚创建的webdav_test 目录。点击OK后,如果挂成功,我的电脑里就会发现已经挂载了一块网盘,打开就可以看到阿里云盘的里保存的文件。

image

这样就可以不使用阿里云盘的客户端,直接对云盘里的文件进行操作了,也可以直接使用本地播放器在线播放里面的电影。

Linux通过Rclone 挂载阿里云盘

Rclone的步骤比Raidrive 略显复杂,它需要先配置连接信息,然后通过该配置信息再对网盘执行相关操作。

安装RCLONE

我们直接使用官网的安装脚本进行安装,更多安装方式可以查看 官网说明

curl https://rclone.org/install.sh | sudo bash

配置RCLONE

安装完成后,配置一个专门连接webdav-server 的配置,详细步骤如下:

输入 rclone config ,开始进行配置(注意看注释说明)

root@guaosi:~# rclone config
Current remotes:

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config

e/n/d/r/c/s/q> n # 创建一个新的配置项,回车

name> aliyunwebdav # 给新的配置项取个名字,后面使用时都会通过这个名称来区分是使用哪个配置,个人喜好,回车

...
39 / Uptobox
   \ "uptobox"
40 / Webdav
   \ "webdav"
41 / Yandex Disk
   \ "yandex"
...

Storage> 40 # 使用webdav(这里是不是40取决于rclone版本,反正是使用webdav就对了)

Enter a string value. Press Enter for the default ("").
url> http://192.168.137.200:9090 # 填写 webdav server 的地址信息

...
 4 / Sharepoint with NTLM authentication, usually self-hosted or on-premises
   \ "sharepoint-ntlm"
 5 / Other site/service or software
   \ "other"
vendor> 5 # 没有阿里云盘,选个其他即可

Enter a string value. Press Enter for the default ("").
user> admin # 输入连接 webdav server 的账号

Choose an alternative below. Press Enter for the default (n).
y) Yes type in my own password
g) Generate random password
n) No leave this optional password blank (default)
y/g/n> y # 使用设定的密码

Enter the password:
password: admin # 输入连接 webdav server 的密码

Confirm the password:
password: admin # 再一次确认输入连接 webdav server 的密码

Enter a string value. Press Enter for the default ("").
bearer_token> # 没有,直接回车

Edit advanced config?
y) Yes
n) No (default)
y/n> # 以上这些信息够了。直接回车

--------------------
[aliyunwebdav]
type = webdav
url = http://192.168.137.200:9090
vendor = other
user = admin
pass = *** ENCRYPTED ***
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> # 确认无误,直接回车

Current remotes:

Name                 Type
====                 ====
aliyunwebdav         webdav

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q # 配置完成,退出

输入命令

rclone ls aliyunwebdav:/

查看是否会列出网盘下的文件列表,会则表示配置无误了。

RCLONE常用命令

文件上传
# 将本地的 /home/file 文件上传到阿里云盘的 webdav_test 目录下
rclone copy /home/file aliyunwebdav:/webdav_test
文件下载
# 将阿里云盘的 webdav_test 目录加的file文件下载到本地 /home/test/ 目录下
rclone copy aliyunwebdav:/webdav_test/file /home/test/ #
列表
# 展示顶级目录下的所有文件
rclone ls aliyunwebdav:/

# 比上面多一个显示上传时间
rclone lsl aliyunwebdav:/ 

# 只显示文件夹
rclone lsd aliyunwebdav:/

挂载阿里云盘

上面只是在发送命令来与webdav server 进行交互,如果我们想像在windows 上一样像挂载一块盘进来,可以使用cp ,mv 之类的命令直接进行操作,那应该如何设置呢?

实际上很简单,我们通过rclone自带命令就可以实现盘的挂载

# 创建目录来给阿里云盘挂载
mkdir -p /usr/local/webdav_test

# 挂载命令(将云盘挂载到本地指定目录)
rclone mount aliyunwebdav:/webdav_test /usr/local/webdav_test --cache-dir /tmp --allow-other --vfs-cache-mode writes --allow-non-empty

上面命令会将阿里云盘的webdav_test (也可以挂载顶级目录,也就是 /)目录挂载到本地的 /usr/local/webdav_test 目录下。

另外,该命令会阻塞命令窗口,所以另外启动一个窗口进入/usr/local/webdav_test 查看是否能看到云盘里的文件。此外,如果我们关闭了先前执行挂载命令的窗口,那么挂载就会自动解挂退出,并且如果我们想开机时自动进行云盘挂载,也需要重新手动跑命令,不够方便。所以,我们可以借助Linux的systemd 将命令服务化来进行管理。

挂载报错处理:
解决方法:
rclone mount报错

报错内容如下:
Fatal error: failed to mount FUSE fs: fusermount: exec: "fusermount": executable file not found in $PATH

Centos解决办法:
yum install fuse

Debian/Ubuntu解决办法:
apt-get install fuse
安装完fuse后,再次执行挂载命令进行挂载

服务化

创建system的service

vim /etc/systemd/system/rclone.service

内容如下

[Unit]
Description=Rclone
After=network-online.target
[Service]
Type=simple
ExecStart=rclone mount aliyunwebdav:/webdav_test /usr/local/webdav_test --cache-dir /tmp --allow-other --vfs-cache-mode writes --allow-non-empty
Restart=on-abort
User=root
[Install]
WantedBy=default.target

保存退出后,启动服务

systemctl start rclone

设置开机自启

systemctl enable rclone

其它操作命令

# 重启
systemctl restart rclone

# 停止
systemctl stop rclone

# 状态
systemctl status rclone

好啦,这样就可以安心的跟小姐姐们玩耍啦~

本文作者: guaosi
本文链接: https://www.guaosi.com/2021/12/06/mount-alicloud-disks-locally-through-webdav-protocol/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议

知识共享许可协议
进行许可。转载请注明出处!

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇