5 个版本
0.31.4 | 2023年1月12日 |
---|---|
0.31.3 | 2023年1月12日 |
0.31.2 | 2023年1月12日 |
0.31.1 | 2023年1月12日 |
0.31.0 | 2023年1月12日 |
#1114 在 HTTP服务器
每月26次下载
140KB
2.5K SLoC
Dufs
Dufs 是一个独特的实用文件服务器,支持静态服务、上传、搜索、访问控制、webdav...
特性
- 服务静态文件
- 将文件夹作为zip文件下载
- 上传文件和文件夹(拖放)
- 搜索文件
- 部分响应(并行/续传下载)
- 路径级别访问控制
- 支持https
- 支持webdav
- 易于使用curl
安装
使用cargo
cargo install dufs
使用docker
docker run -v `pwd`:/data -p 5000:5000 --rm -it sigoden/dufs /data -A
使用 Homebrew
brew install dufs
在 macOS、Linux、Windows 上提供二进制文件
从 Github 发布版 下载,解压并将 dufs 添加到您的 $PATH。
命令行界面(CLI)
Dufs is a distinctive utility file server - https://github.com/sigoden/dufs
Usage: dufs [OPTIONS] [root]
Arguments:
[root] Specific path to serve [default: .]
Options:
-b, --bind <addrs> Specify bind address or unix socket
-p, --port <port> Specify port to listen on [default: 5000]
--path-prefix <path> Specify a path prefix
--hidden <value> Hide paths from directory listings, separated by `,`
-a, --auth <rules> Add auth for path
--auth-method <value> Select auth method [default: digest] [possible values: basic, digest]
-A, --allow-all Allow all operations
--allow-upload Allow upload files/folders
--allow-delete Allow delete files/folders
--allow-search Allow search files/folders
--allow-symlink Allow symlink to files/folders outside root directory
--allow-archive Allow zip archive generation
--enable-cors Enable CORS, sets `Access-Control-Allow-Origin: *`
--render-index Serve index.html when requesting a directory, returns 404 if not found index.html
--render-try-index Serve index.html when requesting a directory, returns directory listing if not found index.html
--render-spa Serve SPA(Single Page Application)
--assets <path> Use custom assets to override builtin assets
--tls-cert <path> Path to an SSL/TLS certificate to serve with HTTPS
--tls-key <path> Path to the SSL/TLS certificate's private key
--log-format <format> Customize http log format
--completions <shell> Print shell completion script for <shell> [possible values: bash, elvish, fish, powershell, zsh]
-h, --help Print help information
-V, --version Print version information
示例
服务当前工作目录
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
监听特定主机:ip
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
/-
控制谁可以在哪个路径上做什么。
dufs -a <path>@<readwrite>
dufs -a <path>@<readwrite>@<readonly>
dufs -a <path>@<readwrite>@*
<path>
: 受保护的URL路径<readwrite>
: 具有读写权限的账户。如果以dufs --allow--all
运行 dufs,则权限为上传/删除/搜索/查看/下载。如果以dufs --allow--upload
运行 dufs,则权限为上传/查看/下载。<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
记录远程用户
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
自定义UI
Dufs允许用户使用自己的资产来自定义UI。
dufs --assets my-assets-dir/
您的资产文件夹必须包含一个index.html
文件。
index.html
可以使用以下占位符变量来检索内部数据。
__INDEX_DATA__
:目录列表数据__ASSERTS_PREFIX__
:资产URL前缀
许可证
版权所有(c)2022 dufs-developers。
dufs可根据您的选择,在MIT许可证或Apache许可证2.0的条款下提供。
请参阅LICENSE-APACHE和LICENSE-MIT文件以获取许可证详细信息。
依赖项
~12–26MB
~406K SLoC