#文件服务器 #服务器 #静态 #静态文件 #webdav #访问控制 #文件路径

应用程序 dufs-zh

Dufs 是一个独特的实用文件服务器

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日

#1114HTTP服务器

每月26次下载

MIT/Apache

140KB
2.5K SLoC

Dufs

CI Crates

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

demo

特性

  • 服务静态文件
  • 将文件夹作为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