Dufs

CI Crates

英文文档

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

demo

Features

安装

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 指定绑定地址或 unix socket -p, --port 指定要监听的端口 [default: 5000] --path-prefix 指定路径前缀 --hidden 隐藏目录列表中的路径,以 , 分隔 -a, --auth 为路径添加身份验证 --auth-method 选择授权方式 [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 使用自定义资源覆盖内置资源 --tls-cert 用于 HTTPS 的 SSL/TLS 证书的路径 --tls-key SSL/TLS 证书私钥的路径 --log-format 自定义 http 日志格式 --completions 打印 的 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>@*

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:

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

日志格式

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

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

| 变量 | 描述 | | ------------ | ------------------------------------------------------------------------- | | $remoteaddr | 客户地址 | | $remoteuser | 随身份验证提供的用户名 | | $request | 完整的原始请求行 | | $status | 响应状态 | | $http_ | 任意请求标头字段。例子: $httpuseragent, $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 可以使用以下占位符变量来检索内部数据.

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.