当前位置: 首页 > news >正文

GitHub开源的轻量级文件服务器,可docker一键部署

文件服务器

    • 介绍
    • 安装使用
      • 命令使用
      • API调用

介绍

项目github官网地址

Dufs是一款由Rust编写的轻量级文件服务器,不仅支持静态文件服务,还能轻松上传、下载、搜索文件,甚至支持WebDAV,让我们通过Web方式远程管理文件变得轻而易举。而且,它跨平台,无论是Windows、macOS还是Linux,都能轻松驾驭

性能特色

  • 静态文件服务:一键开启,让你的文件触手可及。
  • 上传下载:支持拖放上传,文件夹打包下载为zip,省时又省力。
  • 文件操作:创建、编辑、搜索文件,一切尽在掌握。
  • 断点续传:再也不用担心大文件传输中断了,Dufs支持断点续传,让你的下载上传无忧。
  • 访问控制:灵活的权限设置,无论是公开分享还是私密访问,都能轻松搞定。
  • HTTPS & WebDAV:安全传输,远程管理,一个都不能少。

安装使用

Ubuntu2404-server

该项目支持多平台安装,这里我使用docker进行快速搭建

root@huhy:~# docker images
REPOSITORY       TAG       IMAGE ID       CREATED        SIZE
sigoden/dufs     latest    f7f212903ad7   3 months ago   4.37MB
docker run -v `pwd`:/data -p 5000:5000 --rm sigoden/dufs /data -A
  • -v \pwd:/data:

    • -v: 这是用于挂载卷的选项。
    • pwd: 这是一个命令替换,返回当前工作目录的路径。
    • :/data: 把主机上的当前目录(由 pwd 命令获取的路径)挂载到容器内的 /data 目录中。这样,容器可以访问主机上的这个目录中的文件。
      -p 5000:5000:
  • -p: 这是用于端口映射的选项。
    5000:5000: 将主机的 5000 端口映射到容器的 5000 端口。这样,主机访问 localhost:5000 时,会转发到容器的 5000 端口。

  • –rm: 这个选项指定在容器停止运行后,自动删除容器。这样可以防止积累不必要的临时容器。

  • sigoden/dufs: Docker 镜像的名称,sigoden/dufs 是镜像的全名,运行的镜像是 sigoden 用户创建的 dufs 镜像。

  • /data: 这是传递给 dufs 程序的第一个参数,表示 dufs 要共享的目录路径(这里指向容器内的 /data 目录,即挂载的主机目录)。

  • -A: 这是传递给 dufs 程序的一个选项,通常用于表示启用身份验证或匿名访问等配置(具体功能取决于 dufs 的实现)

使用home目录作为共享目录:

root@huhy:/home# ls
huhy  sigoden.tar
root@huhy:/home# docker run -v `pwd`:/data -p 5000:5000 --rm sigoden/dufs /data -A
Listening on:http://127.0.0.1:5000/http://172.17.0.2:5000/http://[::1]:5000/

界面IP:5000查看

在这里插入图片描述
win系统可界面上传

在这里插入图片描述

界面创建目录等

在这里插入图片描述

命令使用

命令在docker环境中不能使用,因为该镜像很小,没有bash环境,如果需要使用命令,则使用其他搭建方式,有镜像需要可评论区

修改默认的端口

dufs . -p 8080

共享当前目录并允许所有操作(上传、删除等)

dufs -A  

只允许上传:

dufs --allow-upload 

指定特定目录

dufs temp 

指定文件

dufs temp.doc

制定8080端口

dufs -p 8080

帮助手册

Dufs is a distinctive utility file server - https://github.com/sigoden/dufsUsage: dufs [OPTIONS] [serve-path]Arguments:[serve-path]  Specific path to serve [default: .]Options:-c, --config <file>        Specify configuration file-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, e.g. tmp,*.log,*.lock-a, --auth <rules>         Add auth roles, e.g. user:pass@/dir1:rw,/dir2-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>        Set the path to the assets directory for overriding the built-in assets--log-format <format>  Customize http log format--log-file <file>      Specify the file to save logs to, other than stdout/stderr--compress <level>     Set zip compress level [default: low] [possible values: none, low, medium, high]--completions <shell>  Print shell completion script for <shell> [possible values: bash, elvish, fish, powershell, zsh]--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-h, --help                 Print help-V, --version              Print version

API调用

  1. 上传文件
curl -T path-to-file http://127.0.0.1:5000/new-path/path-to-file
  • -T path-to-file: 上传本地文件 path-to-file 到服务器。
  • http://127.0.0.1:5000/new-path/path-to-file: 将文件上传到服务器的指定路径 new-path/path-to-file。
  1. 下载文件
curl http://127.0.0.1:5000/path-to-file           # download the file
curl http://127.0.0.1:5000/path-to-file?hash      # retrieve the sha256 hash of the file
  • 下载文件: 直接访问文件的 URL 将文件下载到本地。
  • 获取文件的 SHA256 哈希值: 通过在 URL 后添加 ?hash,获取文件的 SHA256 哈希值,而不是文件内容。
  1. 下载文件夹为 ZIP 文件
curl -o path-to-folder.zip http://127.0.0.1:5000/path-to-folder?zip
  • -o path-to-folder.zip: 指定下载后保存的 ZIP 文件名。
  • ?zip: 在文件夹 URL 后添加 ?zip,将该文件夹打包为 ZIP 文件进行下载。
4. 删除文件/文件夹
curl -X DELETE http://127.0.0.1:5000/path-to-file-or-folder
  • -X DELETE: 使用 DELETE 方法删除指定路径的文件或文件夹。
  1. 创建目录
curl -X MKCOL http://127.0.0.1:5000/path-to-folder
  • -X MKCOL: 使用 MKCOL 方法创建一个新的目录。
  1. 移动文件/文件夹
curl -X MOVE http://127.0.0.1:5000/path -H "Destination: http://127.0.0.1:5000/new-path"
  • -X MOVE: 使用 MOVE 方法将文件或文件夹从 path 移动到 new-path。
  • -H “Destination: http://127.0.0.1:5000/new-path”: 指定新的路径(目标路径)。
  1. 列出/搜索目录内容
curl http://127.0.0.1:5000?q=Dockerfile           # search for files, similar to `find -name Dockerfile`
curl http://127.0.0.1:5000?simple                 # output names only, similar to `ls -1`
curl http://127.0.0.1:5000?json                   # output paths in json format
  • ?q=Dockerfile: 搜索目录中与 Dockerfile 匹配的文件,类似于 find -name Dockerfile。
  • ?simple: 只输出文件或文件夹的名称,类似于 ls -1。
  • ?json: 以 JSON 格式输出目录内容。
  1. 授权访问
curl http://127.0.0.1:5000/file --user user:pass                 # basic auth
curl http://127.0.0.1:5000/file --user user:pass --digest        # digest auth
  • –user user:pass: 使用基本验证,提供用户名 user 和密码 pass 进行身份验证。
  • –digest: 使用摘要认证(Digest Authentication),这是更安全的一种认证方式。
  1. 断点续传下载
curl -C- -o file http://127.0.0.1:5000/file
  • -C-: 断点续传下载,自动从上次中断处恢复下载。
  • -o file: 将下载的文件保存为指定名称。

10.支持断点续传的上传 (Resumable uploads)

upload_offset=$(curl -I -s http://127.0.0.1:5000/file | tr -d '\r' | sed -n 's/content-length: //p')
dd skip=$upload_offset if=file status=none ibs=1 | \curl -X PATCH -H "X-Update-Range: append" --data-binary @- http://127.0.0.1:5000/file
  • 第一行: 获取已上传的文件大小,作为断点续传的起点。
    • -I: 获取文件的头信息(header)。
    • tr -d ‘\r’: 删除回车符。
    • sed -n ‘s/content-length: //p’: 提取 Content-Length 头的值,表示已上传的字节数。
  • 第二行: 从断点处继续上传文件。
    • dd skip=$upload_offset if=file status=none ibs=1: 跳过已上传的部分,从断点处开始读取文件。
    • curl -X PATCH -H “X-Update-Range: append” --data-binary @-: 使用 PATCH 方法上传文件剩余部分。

相关文章:

GitHub开源的轻量级文件服务器,可docker一键部署

文件服务器 介绍安装使用命令使用API调用 介绍 项目github官网地址 Dufs是一款由Rust编写的轻量级文件服务器&#xff0c;不仅支持静态文件服务&#xff0c;还能轻松上传、下载、搜索文件&#xff0c;甚至支持WebDAV&#xff0c;让我们通过Web方式远程管理文件变得轻而易举。…...

Scratch编程深度探索:解锁递归与分治算法的奥秘

标题&#xff1a;Scratch编程深度探索&#xff1a;解锁递归与分治算法的奥秘 在编程的世界里&#xff0c;递归和分治算法以其精妙的逻辑结构和解决问题的能力而著称。Scratch&#xff0c;这款专为儿童和初学者设计的图形化编程工具&#xff0c;是否能够支持实现这样复杂的逻辑…...

使用docker compose一键部署 Portainer

使用docker compose一键部署 Portainer Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 1、创建安装目录 mkdir /data/partainer/ -p && cd /data/partainer2、创建docker…...

js原生模板引擎

在JavaScript中,可以使用模板字符串(template strings)来创建简单的模板。模板字符串是用反引号(`)标识的字符串,其中内嵌表达式使用${}格式。 下面是一个简单的模板函数示例,它接受一个对象作为参数,并使用模板字符串来生成一个HTML字符串。 function createTemplat…...

Java面试题———MySql篇③

目录 1.查询语句执行流程 2.索引的数据结构是什么 3.数据库中的锁有哪些 4.MySQL日志类型 5.MySQL主从复制的流程 6.谈谈你对sql的优化的经验 1.查询语句执行流程 一条查询语句到达MySQL数据库之后&#xff0c;数据库中的各个组件会按照顺序执行自己的任务 首先是连接器…...

ArcGis在线地图插件Maponline(好用版)

ArcGis加载插件&#xff0c;可在线浏览谷歌地图、天地图、高德地图、必应地图等多种&#xff0c;包含街道、影像、标注地图等信息&#xff08;谷歌地图需自备上网手段&#xff09;&#xff0c;免费注册账号即可使用&#xff0c;可加载无水印底图。 与大地2000坐标无需配准直接使…...

Chainlit接入DifyAI知识库接口快速实现自定义用户聊天界面

前言 由于dify只提供了一个分享用的网页应用&#xff0c;网页访问地址没法自定义&#xff0c;虽然可以接入NextWeb/ChatGPT web/open webui等开源应用。但是如果我们想直接给客户应用&#xff0c;还需要客户去设置配置&#xff0c;里面还有很多我们不想展示给客户的东西怎么办…...

《Python编程:从入门到实践》笔记(一)

一、字符串 1.修改字符串大小写 title()以首字母大写的方式显示每个单词&#xff0c;即将每个单词的首字母都改为大写&#xff0c;其他的改为小写。 upper()将字母都改为大写&#xff0c;lower()将字母都改为小写。 2.合并(拼接)字符串 Python使用加号()来合并字符串。这种合…...

Linux入门——06 基础IO

1.什么是当前路径 exe -> /home/lin/Desktop/Linux_learn/fork_learn/test 当前进程执行是磁盘路径下的哪一个程序 cwd -> /home/lin/Desktop/Linux_learn/fork_learn 当前进程的工作目录------》当前进程 1.1当前路径这个地址能改吗&#xff1f; 可以&#xff0c;使…...

未来城市的科技展望

未来城市&#xff0c;‌将是科技与人文深度融合的产物&#xff0c;‌展现出一个全方位智能化、‌绿色生态且可持续发展的全新面貌。‌随着物联网、‌人工智能等技术的飞速发展&#xff0c;‌未来城市的轮廓逐渐清晰&#xff0c;‌它将为我们带来前所未有的生活体验。‌ 在未来…...

DevOps安全性的重要性体现在哪?

DevOps的安全性&#xff0c;也称为DevSecOps&#xff0c;是DevOps领域中的一个重要方面&#xff0c;它强调将安全实践集成到DevOps流程中&#xff0c;以提高代码发布的质量和速度&#xff0c;并降低安全漏洞的风险。 DevOps安全性的重要性&#xff1a; 提高代码质量和速度&…...

【tip】数量级大小

大于1 量级英文名称中文名称yotta尧zetta泽exa艾peta拍tera太giga吉mega兆kilo千hecto百deca十 小于1 量级英文名称中文名称deci分centi厘milli毫micro微nano纳pico皮femto飞atto阿zepto仄yocto幺...

Java基础——自学习使用(static关键字)

一、static关键字是什么&#xff1f; static修饰的代码属于类&#xff0c;定义的变量存储在方法区的静态常量池当中 二、static可以修饰什么 1.static修饰变量 static修饰的变量叫做类变量&#xff0c;被所有该类产生的对象所共享&#xff0c;存储在方法区的静态常量池中 2…...

安装docker+docker远程连接

docker Docker 是⼀个开源的应⽤容器引擎&#xff0c;可以实现虚拟化&#xff0c;完全采⽤“沙盒”机制&#xff0c;容器之间不会存在任何接⼝。 docker架构 docker核心概念 1. 镜像&#xff08;images&#xff09;&#xff1a;⼀个⾯向 docker 容器引擎的只读模板&#xff0c;…...

2080. 邻接点

代码 #include<bits/stdc.h> using namespace std; int main() {int n,e,i,j,x,y;cin>>n >> e;vector<vector<int>> adj(n1);for(i0;i<e;i){cin>>x>>y;adj[x].push_back(y);}for(i1;i<n;i)sort(adj[i].begin(),adj[i].end())…...

《计算机操作系统》(第4版)第7章 文件管理 复习笔记

第7章 文件管理 一、文件和文件系统 1. 数据项、记录和文件 数据组成可分为数据项、记录和文件三级&#xff0c;它们之间的层次关系如图7-1所示。 图7-1 文件、记录和数据项之间的层次关系 (1)数据项 在文件系统中&#xff0c;数据项是最低级的数据组织形式&#xff0c;可以分为…...

uniapp 修复使用 uni.saveImageToPhotosAlbum 方法在部分安卓手机上保存失败

场景&#xff1a;使用 uni.saveImageToPhotosAlbum 保存图片&#xff0c;其他手机都是可以的&#xff0c;但在鸿蒙系统的手机上出现了bug&#xff0c;报错Object {errMsg:"savelmageToPhotosAlbum:fai..errMsg:savelmageToPhotosAlbum:fail invalid filetype"} 原因&…...

电脑无法新建 Word Excle PPT 这些文件是咋回事

咦 我的电脑怎么没有 Excel文件 Word文件 和 PPT选项嘞 &#xff01;&#xff01; 今天突然要写个材料&#xff0c;发现自己新建文件竟然没有excel文档 word和ppt幻灯片这些选项。哦 原来是我自己上次把电脑从win7升级win10系统之后还没有安装wps这些所以不能使用。如果你的电…...

CANoe.DiVa的应用——生成TP层测试用例过程流程详解(二)

🙋‍♂️【Vector CANdelastudio配置CDD】文章合集💁‍♂️点击跳转 ——————————————————————————————————–—— 从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者,时光不负有心人。 目录 一.概述2.经典CAN T…...

java设计模式--组合模式、适配器模式

组合模式 组合模式&#xff08;Composite Pattern&#xff09;允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式让客户端可以统一地处理单个对象和组合对象。在这个模式中&#xff0c;组合对象&#xff08;Composite&#xff09;和叶子对象&#xff08;Lea…...

Python中数据分块处理的实现方法

在实际的数据处理任务中&#xff0c;我们经常需要处理大规模数据集。一次性加载所有数据到内存可能会导致内存溢出&#xff0c;这时数据分块处理就显得尤为重要。本文将介绍Python中三种高效的数据分块处理方法。 一、为什么需要数据分块处理&#xff1f; 在处理大型数据集时…...

如何使用Aimeos构建高效产品目录:从基础商品到复杂配置型产品的完整指南

如何使用Aimeos构建高效产品目录&#xff1a;从基础商品到复杂配置型产品的完整指南 【免费下载链接】aimeos Integrated online shop based on Laravel 10 and the Aimeos e-commerce framework for ultra-fast online shops, scalable marketplaces, complex B2B application…...

保姆级教程:在ROS2 Humble和Gazebo 11中配置FAST_LIO_ROS2进行三维SLAM仿真

从零搭建ROS2与Gazebo环境&#xff1a;FAST_LIO_ROS2三维SLAM实战指南 刚接触机器人仿真的开发者常被环境配置的复杂性劝退——依赖冲突、参数配置错误、话题不匹配等问题层出不穷。本文将手把手带您完成ROS2 Humble、Gazebo 11与FAST_LIO_ROS2的完整集成&#xff0c;实现一个可…...

量子力学的抽象地位与c语言等价

多种量子/粒子的各种表象&#xff0c;就像 cpu 的微架构指令集&#xff0c;量子力学的状态矢量表示和密度矩阵表示就像c语言。 中间从状态矢量到具体粒子的具体表象的转换&#xff0c;就像是一个编译器的工作。量子力学表象与编译器架构的深刻类比这个类比非常精妙且深刻&#…...

自己搭建永磁同步电机参数变动模块:为预测控制助力

永磁同步电机参数不确定/参数变化/参数失配/参数摄动模块 其中直交轴电感,电阻,磁链&#xff0c;转动惯量&#xff0c;粘滞摩擦系数可设置为自己所需的时变工况 适合做预测控制的同志们 由于MATLAB封装模块不可改动&#xff0c;于是自己搭建了这个模块,默认版本为2021b最近在研…...

使用Proteus进行电路仿真:为HunyuanVideo-Foley生成电子音效提供灵感

使用Proteus进行电路仿真&#xff1a;为HunyuanVideo-Foley生成电子音效提供灵感 1. 引言&#xff1a;当电路仿真遇上AI音效生成 想象一下&#xff0c;你正在为一款科幻游戏设计音效。传统的音效库已经用腻了&#xff0c;想要一些真正独特、带有"电路感"的声音效果…...

PyTorch版本冲突?手把手教你用conda解决torch和torchvision依赖问题(附常见错误排查)

PyTorch版本冲突&#xff1f;手把手教你用conda解决torch和torchvision依赖问题&#xff08;附常见错误排查&#xff09; 深度学习开发中&#xff0c;PyTorch环境的配置往往是项目启动的第一道门槛。许多开发者在安装torch和torchvision时都遇到过令人头疼的版本冲突问题——明…...

DDrawCompat:现代Windows系统下的经典图形API兼容解决方案

DDrawCompat&#xff1a;现代Windows系统下的经典图形API兼容解决方案 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/DD…...

保姆级教程:用Arch Linux为你的旧手机编译LineageOS 21(附LG G8 ThinQ实战记录)

深度实战&#xff1a;在Arch Linux上为LG G8 ThinQ编译LineageOS 21的完整指南 当老旧手机逐渐被厂商放弃系统更新时&#xff0c;自行编译定制ROM成为延长设备寿命的最佳选择。本文将详细记录在Arch Linux环境下为LG G8 ThinQ&#xff08;代号alphaplus&#xff09;编译Lineage…...

Cursor滑跪开源技术报告:Kimi基模这样微调能干翻Claude

Cursor滑跪开源技术报告&#xff1a;Kimi基模这样微调能干翻Claude 导读&#xff1a;当"套壳"成为一门技术活&#xff0c;Cursor用一份技术报告告诉我们&#xff1a;基于中国开源模型Kimi K2.5&#xff0c;通过持续预训练异步强化学习&#xff0c;完全可以在代码Agen…...