群晖应用webdav的问题

群晖的webdav套件,不支持完整的api规范,或者说webdav的api没有权限去操作文件。表现为: 通过第三方webdav客户端的api,上传、下载文件没有问题,但是复制、移动文件、文件夹,会报错502。

解决办法:

自己在群晖里运行一个webdav的docker容器(参考),并且加上root权限。

version: '3'
services:
  webdav:
    container_name: mydav
    image: bytemark/webdav
    restart: always
    user: "0:0"
    ports:
      - "5080:80"
    environment:
      AUTH_TYPE: Basic #务必注意!!HTTP使用digest,HTTPS使用Basic
      USERNAME: test01
      PASSWORD: 123
      # 以下按需
      LOCATION: /dav  # 客户端连接url,默认是/
      ANONYMOUS_METHODS: '' #GET,PROPFIND,OPTIONS,HEAD #ALL #未登录用户允许的HTTP方法,如果需要未登录也能读就要设置为后面的一串
 
    volumes:
      - <本机的webdav共享文件夹目录>:/var/lib/dav/data
      - /root/compose/user.passwd:/user.passwd #参见后文,按需前者改成实际的user.passwd的路径

中文乱码修复

docker ps #查看容器id
docker exec -it <容器id> /bin/bash
vi conf/conf-enabled/dav.conf
<Directory "/var/lib/dav/data/">
  Dav On
  Options Indexes FollowSymLinks
 
  AuthType Basic
  AuthName "WebDAV"
  IndexOptions Charset=utf-8      <-----------添加这一行
  AuthUserFile "/user.passwd"
  <RequireAny>
    Require valid-user
  </RequireAny>
</Directory>

设置密码

除了在docker-compose.yml中设置密码也可以将验证信息写入文件user.passwd,这样可以多用户访问,并且密码更改可以不用重启docker-compose

# 安装 htdigest
yum install httpd-tools
# 在 compose 目录中
touch user.passwd
htdigest -c user.passwd WebDAV <你的用户> # -c是新建文件夹或覆盖,不带参数是追加
#根据提示输入密码并重复