Git Product home page Git Product logo

aliyundrive-webdav's Introduction

aliyundrive-webdav

GitHub Actions PyPI Docker Image aliyundrive-webdav Crates.io

🚀 Help me to become a full-time open-source developer by sponsoring me on GitHub

阿里云盘 WebDAV 服务,主要使用场景为配合支持 WebDAV 协议的客户端 App 如 InfusenPlayer 等实现在电视上直接观看云盘视频内容, 支持客户端 App 直接从阿里云盘获取文件播放而不经过运行本应用的服务器中转, 支持上传文件,但受限于 WebDAV 协议不支持文件秒传。

请注意:V2 版本基于阿里云盘开放平台接口实现,不再支持阿里云盘 Web 和 App 版本获取的 refresh token。 由于本项目作者不再使用梅林固件,V2 版本不再免费支持 Koolshare 梅林固件系统,如有需要请考虑付费支持

如果项目对你有帮助,请考虑捐赠支持项目持续维护。 也可以考虑加入aliyundrive-webdav 知识星球获取咨询和技术支持服务。

Note

本项目作者没有上传需求, 故上传文件功能测试不全面且没有持续迭代计划.

安装

可以从 GitHub Releases 页面下载预先构建的二进制包, 也可以使用 pip 从 PyPI 下载:

pip install aliyundrive-webdav

如果系统支持 Snapcraft 比如 Ubuntu、Debian 等,也可以使用 snap 安装:

sudo snap install aliyundrive-webdav

OpenWrt 路由器

GitHub Releases 中有预编译的 ipk 文件, 目前提供了 aarch64/arm/mipsel/x86_64/i686 等架构的版本,可以下载后使用 opkg 安装,以 nanopi r4s 为例:

wget https://github.com/messense/aliyundrive-webdav/releases/download/v2.3.3/aliyundrive-webdav_2.3.3-1_aarch64_generic.ipk
wget https://github.com/messense/aliyundrive-webdav/releases/download/v2.3.3/luci-app-aliyundrive-webdav_2.3.3_all.ipk
wget https://github.com/messense/aliyundrive-webdav/releases/download/v2.3.3/luci-i18n-aliyundrive-webdav-zh-cn_2.3.3-1_all.ipk
opkg install aliyundrive-webdav_2.3.3-1_aarch64_generic.ipk
opkg install luci-app-aliyundrive-webdav_2.3.3_all.ipk
opkg install luci-i18n-aliyundrive-webdav-zh-cn_2.3.3-1_all.ipk

其它 CPU 架构的路由器可在 GitHub Releases 页面中查找对应的架构的主程序 ipk 文件下载安装, 常见 OpenWrt 路由器 CPU 架构如下表(欢迎补充):

路由器 CPU 架构
nanopi r4s aarch64_generic
小米 AX3600 aarch64_cortex-a53
斐讯 N1 盒子 aarch64_cortex-a53
Newifi D2 mipsel_24kc
Pogoplug arm_mpcore

Tips: 不清楚 CPU 架构类型可通过运行 opkg print-architecture 命令查询。

OpenWrt 配置界面

Docker 运行

docker run -d --name=aliyundrive-webdav --restart=unless-stopped -p 8080:8080 \
  -v /etc/aliyundrive-webdav/:/etc/aliyundrive-webdav/ \
  -e REFRESH_TOKEN='your refresh token' \
  -e WEBDAV_AUTH_USER=admin \
  -e WEBDAV_AUTH_PASSWORD=admin \
  messense/aliyundrive-webdav

其中,REFRESH_TOKEN 环境变量为你的阿里云盘 refresh_tokenWEBDAV_AUTH_USERWEBDAV_AUTH_PASSWORD 为连接 WebDAV 服务的用户名和密码。

QNAP 威联通 NAS

QNAP 插件

qnap-aliyunpan-webdav by @iranee.

ContainerStation (Docker)

管理员登陆 NAS 后安装 ContainerStation 并启动服务,在 Management (管理) 标签中 Create Application (新建应用),配置如下

version: '3.3'
services:
  aliyundrive-webdav:
    container_name: aliyundrive-webdav
    restart: unless-stopped
    ports:
      - '8080:8080'
    environment:
      - 'REFRESH_TOKEN=mytoken...'
    image: messense/aliyundrive-webdav

其中 REFRESH_TOKEN 文档最下面说明;:8080 网盘访问映射端口,可以按需改为其他的。

点击 Create (创建)后启动,访问 http://nas地址:8080/ 即可看到你网盘的自动生成索引网页文件。

参考文档

rclone

为了避免重复上传文件,使用 rclone 时推荐使用 Nextcloud WebDAV 模式,可以支持 sha1 checksums. 另外需要配合 --no-update-modtime 参数,否则 rclone 为了更新文件修改时间还是会强制重新上传。

举个例子:

rclone --no-update-modtime copy abc.pdf aliyundrive-nc://docs/

获取 refresh token

扫码获取 refresh token

命令行用法

$ aliyundrive-webdav --help
WebDAV server for AliyunDrive

Usage: aliyundrive-webdav [OPTIONS]
       aliyundrive-webdav <COMMAND>

Commands:
  qr    Scan QRCode
  help  Print this message or the help of the given subcommand(s)

Options:
      --host <HOST>
          Listen host

          [env: HOST=]
          [default: 0.0.0.0]

  -p, --port <PORT>
          Listen port

          [env: PORT=]
          [default: 8080]

      --client-id <CLIENT_ID>
          Aliyun drive client_id

          [env: CLIENT_ID=]

      --client-secret <CLIENT_SECRET>
          Aliyun drive client_secret

          [env: CLIENT_SECRET=]

      --drive-type <DRIVE_TYPE>
          Aliyun drive type

          [env: DRIVE_TYPE=]

          Possible values:
          - resource: Resource drive
          - backup:   Backup drive
          - default:  Default drive

  -r, --refresh-token <REFRESH_TOKEN>
          Aliyun drive refresh token

          [env: REFRESH_TOKEN=]

  -U, --auth-user <AUTH_USER>
          WebDAV authentication username

          [env: WEBDAV_AUTH_USER=]

  -W, --auth-password <AUTH_PASSWORD>
          WebDAV authentication password

          [env: WEBDAV_AUTH_PASSWORD=]

  -I, --auto-index
          Automatically generate index.html

  -S, --read-buffer-size <READ_BUFFER_SIZE>
          Read/download buffer size in bytes, defaults to 10MB

          [default: 10485760]

      --upload-buffer-size <UPLOAD_BUFFER_SIZE>
          Upload buffer size in bytes, defaults to 16MB

          [default: 16777216]

      --cache-size <CACHE_SIZE>
          Directory entries cache size

          [default: 1000]

      --cache-ttl <CACHE_TTL>
          Directory entries cache expiration time in seconds

          [default: 600]

      --root <ROOT>
          Root directory path

          [env: WEBDAV_ROOT=]
          [default: /]

  -w, --workdir <WORKDIR>
          Working directory, refresh_token will be stored in there if specified

      --no-trash
          Delete file permanently instead of trashing it

      --read-only
          Enable read only mode

      --tls-cert <TLS_CERT>
          TLS certificate file path

          [env: TLS_CERT=]

      --tls-key <TLS_KEY>
          TLS private key file path

          [env: TLS_KEY=]

      --strip-prefix <STRIP_PREFIX>
          Prefix to be stripped off when handling request

          [env: WEBDAV_STRIP_PREFIX=]

      --debug
          Enable debug log

      --no-self-upgrade
          Disable self auto upgrade

      --skip-upload-same-size
          Skip uploading same size file

      --prefer-http-download
          Prefer downloading using HTTP protocol

      --redirect
          Enable 302 redirect when possible

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Note

注意:TLS/HTTPS 暂不支持 MIPS 架构。

Note

注意:启用 --skip-upload-same-size 选项虽然能加速上传但可能会导致修改过的同样大小的文件不会被上传

License

This work is released under the MIT license. A copy of the license is provided in the LICENSE file.

aliyundrive-webdav's People

Contributors

ansen avatar beginner-go avatar bitxeno avatar dependabot[bot] avatar drewtato avatar everstu avatar flyhigherpi avatar gngpp avatar messense avatar qianbinbin avatar saxon-sun avatar sihuan avatar sshhsh avatar tatsuya6502 avatar testsmirk avatar tonytony2020 avatar xieguozhong avatar yin1999 avatar zxlhhyccc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aliyundrive-webdav's Issues

pip install aliyundrive-webdav 报错

root@OpenWrt:/# pip install aliyundrive-webdav
Collecting aliyundrive-webdav
  Using cached aliyundrive_webdav-0.1.25.tar.gz (416 kB)
  Installing build dependencies ... error
  ERROR: Command errored out with exit status 1:
   command: /usr/bin/python /tmp/pip-standalone-pip-s_n6o_1h/__env_pip__.zip/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-3bw3spl8/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'maturin>=0.11,<0.12'
       cwd: None
  Complete output (52 lines):
  Collecting maturin<0.12,>=0.11
    Using cached maturin-0.11.3.tar.gz (110 kB)
    Installing build dependencies: started
    Installing build dependencies: finished with status 'done'
    Getting requirements to build wheel: started
    Getting requirements to build wheel: finished with status 'done'
      Preparing wheel metadata: started
      Preparing wheel metadata: finished with status 'done'
  Collecting toml~=0.10.0
    Using cached toml-0.10.2-py2.py3-none-any.whl (16 kB)
  Building wheels for collected packages: maturin
    Building wheel for maturin (PEP 517): started
    Building wheel for maturin (PEP 517): finished with status 'error'
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python /tmp/tmpam39fzon build_wheel /tmp/tmp_eyx5z45
         cwd: /tmp/pip-install-sc2ngmux/maturin_9d7240e8a8b9472ab6f01872cf79ecc5
    Complete output (31 lines):
    running bdist_wheel
    running build
    installing to build/bdist.linux-aarch64/wheel
    running install
    Traceback (most recent call last):
      File "/tmp/tmpam39fzon", line 349, in <module>
        main()
      File "/tmp/tmpam39fzon", line 331, in main
        json_out['return_val'] = hook(**hook_input['kwargs'])
      File "/tmp/tmpam39fzon", line 248, in build_wheel
        return _build_backend().build_wheel(wheel_directory, config_settings,
      File "/tmp/pip-build-env-yop_47yn/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 216, in build_wheel
        return self._build_with_temp_dir(['bdist_wheel'], '.whl',
      File "/tmp/pip-build-env-yop_47yn/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 202, in _build_with_temp_dir
        self.run_setup()
      File "/tmp/pip-build-env-yop_47yn/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 145, in run_setup
        exec(compile(code, __file__, 'exec'), locals())
      File "setup.py", line 106, in <module>
        setup(
      File "/tmp/pip-build-env-yop_47yn/overlay/lib/python3.8/site-packages/setuptools/__init__.py", line 153, in setup
        return distutils.core.setup(**attrs)
      File "/usr/lib/python3.8/distutils/core.py", line 148, in setup
      File "/usr/lib/python3.8/distutils/dist.py", line 966, in run_commands
      File "/usr/lib/python3.8/distutils/dist.py", line 985, in run_command
      File "/tmp/pip-build-env-yop_47yn/overlay/lib/python3.8/site-packages/wheel/bdist_wheel.py", line 335, in run
        self.run_command('install')
      File "/usr/lib/python3.8/distutils/cmd.py", line 313, in run_command
      File "/usr/lib/python3.8/distutils/dist.py", line 985, in run_command
      File "setup.py", line 58, in run
        raise RuntimeError(
    RuntimeError: cargo not found in PATH. Please install rust (https://www.rust-lang.org/tools/install) and try again
    ----------------------------------------
    ERROR: Failed building wheel for maturin
  Failed to build maturin
  ERROR: Could not build wheels for maturin which use PEP 517 and cannot be installed directly
  ----------------------------------------

本地相关版本号

root@OpenWrt:/# pip --version
pip 21.2.4 from /usr/lib/python3.8/site-packages/pip (python 3.8)

目录缓存未更新

操作步骤

  1. 用webdav打开当前目录
  2. 网页客户端上传文件, 或改名
  3. webdav刷新当前目录
  4. 可见文件不存在

请问后续版本可否支持多帐号?

大神好,部署在路由器上,这是最好的选择。非常好的软件,我已安装到K3的openwrt上,共享给电视播放每集12GB的4K版《世部世界》,结果不卡顿很畅顺。但在我的芝杜X9S盒子的openwrt安装不上,不知有没大神可编译一个适合的版本?
另外我想问下,续版本可否支持多帐号?

建议做个docker版本

建议做个docker版本,可以直接使用python3镜像做个docker版本,我在树莓派上测试了,可行

docker最新的版本还是上传不了文件

看到更新说支持上传了,看docker也更新了,就更新了下docker,试了下还是不能上传,请问大佬需要什么信息来调试呢?
docker镜像id是:cb969dcc5b23
webdav是:RaiDrive

aarch64.ipk安装失败(架构不兼容)

路由器型号:小米ax3600,openwrt固件使用的是:https://github.com/Boos4721/updater/tree/OpenWrt

命令行输出:
2021-09-18 20:31:20 (7.84 MB/s) - 'aliyundrive-webdav_0.1.27-1_aarch64_generic.ipk' saved [2122875/2122875]

root@OpenWrt:~# opkg install aliyundrive-webdav_0.1.27-1_aarch64_generic.ipk
Unknown package 'aliyundrive-webdav'.
Collected errors:

  • pkg_hash_fetch_best_installation_candidate: Packages for aliyundrive-webdav found, but incompatible with the architectures configured
  • opkg_install_cmd: Cannot install package aliyundrive-webdav.

root@OpenWrt:~# uname -m
aarch64

出现错误: The input parameter client_id is not valid

Sep 20 17:10:34.013 ERROR aliyundrive_webdav::drive: refresh token failed: HTTP status client error (400 Bad Request) for url (https://websv.aliyundrive.com/token/refresh):
<h1>The input parameter client_id is not valid. Please refer to document. RequestId:171FB923-7FB2-40E2-80F8-C3C1064AF8D4</h1>
<h2>400</h2>
<h2>1EF5474D-FA05-446D-B6CC-162C324356CB</h2>

Error: initialize aliyundrive file system failed

【修复】修复梅林插件的脚本不执行问题,该死的编辑器

放在谷歌盘了:
https://drive.google.com/drive/folders/1jI2tsRoHdkpqj42Bp4k5LcauqNfbn8H-?usp=sharing

另外,华硕路由有点抽的地方就是armv7只能用v5二进制,所以K3是用不了384的。文件名我就相应改成
aliyundrivewebdav_armv5_0.1.23.tar
aliyundrivewebdav_armv7_0.1.23.tar
对应自己机型能用的二进制尝试吧。。。
页面加了插件版本显示。把不存在的PNG去掉了。
image

命令行运行提示Illegal instruction

aliyundrive-webdav --auto-index --cache-size 1000 --host 0 --port 8085 --read-buffer-size 10485760 --refresh-token XXXX
aliyundrive-webdav -I --host ::0 --port 5003 -S 10485760 --cache-size 1000 -r XXXXX -W admin -U admin
按照官方使用说明,以上两条命令行在ssh 运行都出现以下提示:

Sep 04 10:53:00.173 INFO aliyundrive_webdav::drive: refresh token succeed refresh_token=fd2a5db1df774acXXXXXXXX0328c1bd1 nick_name=摸摸么
Sep 04 10:53:00.173 INFO aliyundrive_webdav::drive: found default drive drive_id=1543251
Sep 04 10:53:00.174 INFO aliyundrive_webdav: listening on 0.0.0.0:8085
Illegal instruction

N1盒子coreelec系统docker

N1盒子昨天在openwrt系统很容易安装正常运行,今天用coreelec系统docker部署出错
CoreELEC:~ # docker run -d --name=aliyundrive-webdav --restart=unless-stopped -p 8088:8080 -e REFRESH_TOKEN='e80f06fe04
xxxxxxxxxxxxxx61637cb2' messense/aliyundrive-webdav
Unable to find image 'messense/aliyundrive-webdav:latest' locally
latest: Pulling from messense/aliyundrive-webdav
docker: no matching manifest for linux/arm/v8 in the manifest list entries.
是同一个盒子,只是系统不同。

将来有添加“上传/写入功能”的计划吗?

特地注册了账号来发言。

通过NetDrive挂载云盘为本地磁盘后,上传文件提示“磁盘写保护”。

我平时也会使用nplayer&infuse,没错,这些播放器是把元数据存在播放端的,不需要写入文件至阿里云盘。但像emby这类媒体管理程序,自动下载影片海报、缩略图,保存放进度信息等等,是需要写入文件至影片目录的。

如果能解决上传/写入问题,那真的就太棒了。

目前使用另一位作者的.jar工具,是可以实现上传/写入功能的,但是程序运行效率有问题,所以会持续关注本程序。

谢谢,感恩。

可以监听ipv6地址吗?

我是用的openwrt,安装好以后发现ipv6的地址访问不了!想请问一下可以监听v4和v6不,还有能否多开?我有两个网盘账号都想挂上来!

Docker版在群晖上的问题,求解!

9月11日下载的Docker版本,与群晖cloud sync配合(cloudsync设置单项上传),目录同步完成后。再次向群晖需要上传的目录中保存文件后,cloudsync会重复上传保存文件的那个目录下的文件,不会停。请问,这问题有办法解决吗?

Docker运行提示无法连接

OpenWRT的DockerMan运行时,一直提示连接超时,请问如何验证网络连通与否呢?

stdout: [2mSep 18 10:32:14.064[0m [33m WARN[0m aliyundrive_webdav::drive: refresh token failed, will wait and try error=error sending request for url (https://websv.aliyundrive.com/token/refresh): error trying to connect: operation timed out

refresh token when 401 occurred

Sep 04 15:39:41.165 ERROR aliyundrive_webdav::drive: refresh token failed: error sending request for url (https://websv.aliyundrive.com/token/refresh): error trying to connect: dns error: failed to lookup address information: Try again
Sep 04 15:41:19.432 ERROR aliyundrive_webdav::vfs: refresh directory file list failed error=error sending request for url (https://api.aliyundrive.com/adrive/v3/file/list): error trying to connect: dns error: failed to lookup address information: Try again

Caused by:
    0: error trying to connect: dns error: failed to lookup address information: Try again
    1: dns error: failed to lookup address information: Try again
    2: failed to lookup address information: Try again
Sep 04 15:41:19.642 ERROR aliyundrive_webdav::vfs: refresh directory file list failed error=error sending request for url (https://api.aliyundrive.com/adrive/v3/file/list): error trying to connect: dns error: failed to lookup address information: Try again

Caused by:
    0: error trying to connect: dns error: failed to lookup address information: Try again
    1: dns error: failed to lookup address information: Try again
    2: failed to lookup address information: Try again
Sep 04 15:43:53.146 ERROR aliyundrive_webdav::vfs: refresh directory file list failed error=HTTP status client error (401 Unauthorized) for url (https://api.aliyundrive.com/adrive/v3/file/list)

应当尝试重新获取 token.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.