dufs-zh 0.31.2

Dufs 是一个独特的实用文件服务器
dufs-zh-0.31.2 is not a library.

Dufs

CI Crates

英文文档

Dufs 是一个独特的实用文件服务器,支持静态服务、上传、搜索、访问控制、webdav...

demo

Features

  • 提供静态文件
  • 将文件夹下载为 zip 文件
  • 上传文件和文件夹(拖放)
  • 搜索文件
  • 部分响应(并行/恢复下载)
  • 路径级访问控制
  • 支持 https
  • 支持 webdav
  • 易于使用 curl

安装

With cargo

cargo install dufs-zh

With docker

docker run -v `pwd`:/data -p 5000:5000 --rm -it sigoden/dufs /data -A

With Homebrew

brew install dufs

Binaries on macOS, Linux, Windows

Download from Github Releases, unzip and add dufs to your $PATH.

CLI

Dufs is a distinctive utility file server - https://github.com/sigoden/dufs

Usage: dufs.exe [OPTIONS] [root]

Arguments:
  [root]  启动服务具体路径 [default: .]

Options:
  -b, --bind <addrs>         指定绑定地址或 unix socket
  -p, --port <port>          指定要监听的端口 [default: 5000]
      --path-prefix <path>   指定路径前缀
      --hidden <value>       隐藏目录列表中的路径,以 `,` 分隔
  -a, --auth <rules>         为路径添加身份验证
      --auth-method <value>  选择授权方式 [default: digest] [possible values: basic, digest]
  -A, --allow-all            允许所有操作
      --allow-upload         允许上传文件/文件夹
      --allow-delete         允许删除文件/文件夹
      --allow-search         允许搜索文件/文件夹
      --allow-symlink        允许符号链接到根目录外的文件/文件夹
      --allow-archive        允许生成 zip 存档
      --enable-cors          启用 CORS, 设置 `Access-Control-Allow-Origin: *`
      --render-index         请求目录时提供 index.html, 如果找不到 index.html 则返回 404
      --render-try-index     请求目录时提供 index.html, 如果未找到 index.html, 则返回目录列表
      --render-spa           服务SPA(单页应用)
      --assets <path>        使用自定义资源覆盖内置资源
      --tls-cert <path>      用于 HTTPS 的 SSL/TLS 证书的路径
      --tls-key <path>       SSL/TLS 证书私钥的路径
      --log-format <format>  自定义 http 日志格式
      --completions <shell>  打印 <shell> 的 shell 自动补全脚本 [possible values: bash, elvish, fish,
                             powershell, zsh]
  -h, --help                 Print help information
  -V, --version              Print version information

Examples

当前工作目录启动服务器

dufs

允许所有操作,如上传/删除/搜索...

dufs -A

只允许上传操作

dufs --allow-upload

提供特定目录

dufs Downloads

提供单个文件

dufs linux-distro.iso

服务于像 react/vue 这样的单页应用程序

dufs --render-spa

使用 index.html 提供静态网站

dufs --render-index

需要用户名/密码

dufs -a /@admin:123

在特定主机上

dufs -b 127.0.0.1 -p 80

在 unix 套接字上监听

dufs -b /tmp/dufs.socket

使用 https

dufs --tls-cert my.crt --tls-key my.key

API

上传一个文件

curl -T path-to-file http://127.0.0.1:5000/new-path/path-to-file

下载文件

curl http://127.0.0.1:5000/path-to-file

将文件夹下载为 zip 文件

curl -o path-to-folder.zip http://127.0.0.1:5000/path-to-folder?zip

删除文件/文件夹

curl -X DELETE http://127.0.0.1:5000/path-to-file-or-folder

访问控制

Dufs 支持路径级别的访问控制。您可以控制谁可以在哪条路径上做什么 --auth/-a.

dufs -a <path>@<readwrite>
dufs -a <path>@<readwrite>@<readonly>
dufs -a <path>@<readwrite>@*
  • <path>: 受保护的 url 路径
  • <readwrite>: 具有读写权限的帐户。如果 dufs 使用 dufs --allow-all 运行,则权限为上传/删除/搜索/查看/下载。如果 dufs 使用 dufs --allow-upload 运行,则权限为上传/查看/下载。
  • <readonly>: 具有只读权限的帐户。如果 dufs 允许搜索,则权限为搜索/查看/下载,否则查看/下载..
dufs -A -a /@admin:admin

admin 拥有所有路径的所有权限.

dufs -A -a /@admin:admin@guest:guest

guest 对所有路径具有只读权限.

dufs -A -a /@admin:admin@*

所有路径都是公开的,每个人都可以查看/下载.

dufs -A -a /@admin:admin -a /user1@user1:pass1 -a /user2@pass2:user2

user1 拥有 /user1* 路径的所有权限。 user2 拥有 /user2* 路径的所有权限。

dufs -a /@admin:admin

由于 dufs 只允许查看/下载,因此 admin 只能查看/下载文件。

隐藏路径

Dufs 支持通过选项 --hidden 隐藏目录列表中的路径。

dufs --hidden .git,.DS_Store,tmp

--hidden 还支持变体 glob:

  • ? 匹配任何单个字符
  • * 匹配任何(可能为空的)字符序列
  • 不支持**[..][!..]
dufs --hidden '.*'

dufs --hidden '*.log,*.lock'

日志格式

Dufs 支持使用选项 --log-format 自定义 http 日志格式。

日志格式可以使用以下变量。

变量 描述
$remote_addr 客户地址
$remote_user 随身份验证提供的用户名
$request 完整的原始请求行
$status 响应状态
$http_ 任意请求标头字段。例子: $http_user_agent, $http_referer

默认的日志格式是 '$remote_addr "$request" $status'.

2022-08-06T06:59:31+08:00 INFO - 127.0.0.1 "GET /" 200

禁用 http 日志

dufs --log-format=''

记录用户代理

dufs --log-format '$remote_addr "$request" $status $http_user_agent'
2022-08-06T06:53:55+08:00 INFO - 127.0.0.1 "GET /" 200 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36

记录 remote-user

dufs --log-format '$remote_addr $remote_user "$request" $status' -a /@admin:admin -a /folder1@user1:pass1
2022-08-06T07:04:37+08:00 INFO - 127.0.0.1 admin "GET /" 200

自定义用户界面

Dufs 允许用户使用自己的资源自定义 UI。

dufs --assets my-assets-dir/

您的资产文件夹必须包含一个 'index.html' 文件.

index.html 可以使用以下占位符变量来检索内部数据.

  • __INDEX_DATA__: 目录列表数据
  • __ASSERTS_PREFIX__: 资源 url 前缀

License

Copyright (c) 2022 dufs-developers.

dufs is made available under the terms of either the MIT License or the Apache License 2.0, at your option.

See the LICENSE-APACHE and LICENSE-MIT files for license details.