├── CHFS.MD ├── LICENSE ├── README.md ├── cfg.ini ├── config_full.ini ├── download ├── chfs-linux-amd64-2.0.zip ├── chfs-linux-arm64-2.0.zip ├── chfs-mac-amd64-2.0.zip ├── chfs-windows-x64-2.0.zip ├── chfs-windows-x86-2.0.zip └── gui-chfs-windows.zip └── runchfs.sh /CHFS.MD: -------------------------------------------------------------------------------- 1 | 2 | # CHFS 3 | 4 | ### 简介 5 | 6 | CuteHttpFileServer/chfs是一个免费的、HTTP协议的文件共享服务器,使用浏览器可以快速访问。它具有以下特点: 7 | 8 | * 单个文件,核心功能无需其他文件 9 | * 跨平台运行,支持主流平台:Windows,Linux和Mac 10 | * 界面简洁,简单易用 11 | * 支持扫码下载和手机端访问,手机与电脑之间共享文件非常方便 12 | * 支持账户权限控制和地址过滤 13 | * 支持快速分享文字片段 14 | * 支持webdav协议 15 | 16 | 与其他常用文件共享方式(如FTP,飞秋,网盘,自己建站)相比,具有使用简单,适用场景更多的优点,在个人使用以及共享给他人的场景中非常方便快捷。 17 | 18 | ### 下载 19 | 20 | #### 命令行程序 21 | 22 | * [chfs-changelog.txt](http://iscute.cn/tar/chfs/2.0/chfs-changelog.txt) 23 | * [chfs-linux-386-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-linux-386-2.0.zip) 24 | * [chfs-linux-amd64-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-linux-amd64-2.0.zip) 25 | * [chfs-linux-arm-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-linux-arm-2.0.zip) 26 | * [chfs-linux-arm64-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-linux-arm64-2.0.zip) 27 | * [chfs-linux-mips-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-linux-mips-2.0.zip) 28 | * [chfs-linux-mips-softfloat-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-linux-mips-softfloat-2.0.zip) 29 | * [chfs-linux-mips64-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-linux-mips64-2.0.zip) 30 | * [chfs-linux-mips64-softfloat-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-linux-mips64-softfloat-2.0.zip) 31 | * [chfs-linux-mips64le-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-linux-mips64le-2.0.zip) 32 | * [chfs-linux-mipsle-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-linux-mipsle-2.0.zip) 33 | * [chfs-mac-386-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-mac-386-2.0.zip) 34 | * [chfs-mac-amd64-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-mac-amd64-2.0.zip) 35 | * [chfs-windows-x64-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-windows-x64-2.0.zip) 36 | * [chfs-windows-x86-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-windows-x86-2.0.zip) 37 | * [chfs-支持低版本操作系统(MS XP,OpenBSD 6.0...).zip](http://iscute.cn/tar/chfs/2.0/chfs-%E6%94%AF%E6%8C%81%E4%BD%8E%E7%89%88%E6%9C%AC%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F(MS%20XP,OpenBSD%206.0...).zip) 38 | 39 | #### GUI程序 40 | 41 | * [gui-chfs-windows.zip](http://iscute.cn/tar/chfs/2.0/gui-chfs-windows.zip) 42 | 43 | 44 | 45 | ### 基本用法 46 | 47 | #### 非系统服务运行 48 | 49 | 该程序是一个控制台程序,可直接双击运行,或在控制台/命令行中运行。可通过命令行参数进行相关配置,如使用'chfs --help'来查看帮助: 50 | 51 | ```plain 52 | usage: chfs.exe [] 53 | 54 | Flags: 55 | --help Show context-sensitive help (also try --help-long and 56 | --help-man). 57 | --path=DIRECTORIES Directories where store shared files, separated by '|'. 58 | --port=PORT HTTP listening port(Default is 80). 59 | --allow=LIST Allowed IPv4 addresses(Allow any address by default). 60 | 61 | White list mode: "listitem1[,listitem2,...]" e.g. 62 | "192.168.1.2-192.168.1.10,192.169.1.222" allows this 10 63 | addresses. 64 | 65 | Black list mode: "not(listitem1[,listitem2,...])" e.g. 66 | "not(192.168.1.2-192.168.1.10,192.169.1.222)" bans this 10 67 | addresses! 68 | --rule=LIST Access rules(anybody can access any thing by default). 69 | 70 | List defines like:"USER:PWD:MASK[:DIR:MASK...][|...]": 71 | 72 | 1,USER and PWD is account name and password 73 | 2,MASK:''=NO present,'r'=read,'w'=write,'d'=delete 74 | 3,r=view+download,w=r+upload+create+rename,d=w+delete 75 | 4,DIR is directory name, allows wildcard('*' & '?') 76 | 5,The 3rd field is access mask of shared root directory 77 | 6,The optional fields is pairs of sub-directory and mask 78 | 7,The optional sub-directory's mask overwrite parent's 79 | 8,You should avoid '|' ':' and white space(exclude DIR) 80 | 81 | For instance: "::|root:123456:rw" bans guest, and defines 82 | a account 'root' can do anything 83 | --log=DIRECTORY Log directory. Empty value will disable log. 84 | --file=FILE A configuration file which overwrites & enhence the 85 | settings. 86 | --version Show application version. 87 | ``` 88 | 89 | 90 | 91 | 参数说明: 92 | 93 |
help:显示帮助信息
path:你要共享的目录,默认为程序运行目录。如果需要共享多个目录,则用“|”符号隔开。注意:如果路径带有空格,则需要将整个路径用引号包住。
port:程序使用的端口号,默认为80
allow:IP地址过滤,可使用白名单模式或黑名单模式
rule:账户及访问权限,允许一个账户多点登陆,默认情况下匿名用户具有读写权限,其语法为:

RULEITEM1[|RULEITEM2|RULEITEM3...]

每个RULEITEM代表一个账户信息及其访问权限,多个RULEITEM则用'|'进行分割,RULEITEM的语法为:

USER:PWD:MASK[:DIR:MASK...]

每个项由“:”来分隔,前三个项是必须的,分别对应:账户名、账户密码、共享目录根目录的访问权限。后面的可选的项,必须成对出现,用来设定根目录下面的子级目录的访问权限。一些规定:

* 对于匿名用户,前两个项都为空
* 访问权限分为四种:""(不可访问),"R"(只读),"W"(读写),"D"(写+删除)。读权限指的是下载,写权限指上传、新建等操作,删除权限是在写权限的基础上加上删除权限。
* 各项的值应避免出现空白键,':'及'|'(目录名除外)
log:用户操作日志存放目录,默认是程序所在目录下的logs中。禁用日志功能只需将其赋值为空即可。
file:配置文件,该文件可配置上述配置项,语法相同,如果配置有效则覆盖对应配置项。另外,一些功能需要通过配置文件进行配置,比如页面自定义和SSL证书设置。下载配置文件模板
version:显示程序版本号
94 | 95 | 96 | 97 | 几个例子: 98 | 99 | ```plain 100 | //都使用默认参数,共享目录为程序运行目录,监听端口号为80 101 | chfs 102 | 103 | //共享目录为D盘,监听端口号为8080 104 | chfs --path="d:/" --port=8080 105 | 106 | //共享目录为"d:\\projects"和"e:\\nsis",监听端口号为80 107 | chfs --path="d:\\projects|e:\\nsis" 108 | 109 | //白名单模式,允许192.168.1.2-192.168.1.100以及192.168.1.200进行访问 110 | chfs --allow="192.168.1.2-192.168.1.100,192.168.1.200" 111 | 112 | //黑名单模式,禁止192.168.1.2-192.168.1.100以及192.168.1.200进行访问 113 | chfs --allow="not(192.168.1.2-192.168.1.100,192.168.1.200)" 114 | 115 | //匿名用户具有只读权限(默认情况下匿名用户具有读写权限) 116 | //账户ceshizu,密码为ceshizu123,对根目录的权限为只读,但对test目录具有读写权限 117 | //账户yanfazu,密码为yanfazu123,对根目录的权限为只读,但对yanfa目录具有读写权限 118 | chfs --rule="::r|ceshizu:ceshizu123:r:test:rw|yanfazu:yanfazu123:r:yanfa:rw" 119 | 120 | //匿名用户什么权限都没有(默认情况下匿名用户具有读写权限) 121 | //账户admin,密码为admin123,具有读写权限 122 | //账户zhangsan,密码为zhangsan123,对根目录的权限为不可读写,但对zhangsanfiles目录具有读写权限 123 | chfs --rule="::|admin:admin123:rw|zhangsan:zhangsan123::zhangsanfiles:rw" 124 | 125 | //通过配置文件进行配置,该文件可以不存在,待以后需要更改配置时使用 126 | chfs --file="d:\chfs\chfs.ini" 127 | ``` 128 | 129 | 130 | 131 | Tips 1:在Windows系统中,可以使用右键弹出菜单快捷地共享某个目录。步骤如下: 132 | 133 | ```plain 134 | 1, 下载注册表模板文件 135 | 2, 在该文件中编辑你的chfs.exe的真实路径,并可添加其他参数 136 | 3, 双击该脚本文件,进行注册表添加 137 | ``` 138 | 139 | Tips 2:另外,有几个功能需要通过配置文件中进行配置,其中主要的配置项有: 140 | 141 | ```plain 142 | 1, html.title: 自定义网页标题 143 | 2, html.notice: 自定义网页顶部的公告板。可以是文字,也可以是HTML标签,此时,需要适用一对``(反单引号,通过键盘左上角的ESC键下面的那个键输出)来包住所有HTML标签 144 | 3, ssl.cert和ssl.key: 用来配置SSL,启用HTTPS 145 | 4, folder.leaf.download: 仅最后一个目录可以打包下载 146 | 5, session.timeout: 会话的时长,单位是分钟 147 | ``` 148 | 149 | 150 | 151 | #### 以系统服务运行 152 | 153 | 本程序不是一个服务程序,所以如果你要以系统服务运行,需要自己创建服务。下面给出Windows平台的创建服务方法(通过NSSM工具): 154 | 155 | ```plain 156 | 1, 将chfs.exe放在指定目录,假设为:d:\program\cutehttpfileserver 157 | 2, 到http://www.nssm.cc/download下载nssm 158 | 3, 将解压后的nssm程序放在d:\program\cutehttpfileserver中 159 | 4, 在d:\program\cutehttpfileserver中运行命令行,或运行命令行并CD至该目录 160 | 5, 假设你的服务名称为cute_http_file_service,命令行中输入:nssm install cute_http_file_service 161 | 6, NSSM会弹出配置对话框,在该对话框中输入程序路径以及运行参数 162 | 7, 启动服务,命令行中输入:nssm start cute_http_file_service 163 | ``` 164 | 165 | 166 | 167 | ### 高级用法 168 | 169 | #### 如何启用HTTPS? 170 | 171 | 配置文件中有ssl.cert和ssl.key两个键值,设置好对应的文件目录即可。另外,chfs支持的最低SSL版本为SSLv3,不兼容SSL2的握手。对了,别忘了将监听端口设置为443 172 | 173 | #### 我想自己搞一套页面,请问开发文档在哪里? 174 | 175 | 运行chfs后,通过地址:http://host:port/asset/api.html访问API文档。 176 | 177 | #### 如何启用webdav? 178 | 179 | 程序默认支持webdav,跟http共用同一套访问规则。其地址为:http://host:port/webdav 180 | 181 | ### 测试说明 182 | 183 | #### 运行主机 184 | 185 | * **Windows XP:**√ 186 | * **Windows 10:**√ 187 | * **Debian 9:**√ 188 | * **CentOS 7:**√ 189 | * **其他:**未测试 190 | 191 | #### PC浏览器 192 | 193 | * **IE:**11+ √ 194 | * **Edge:**√ 195 | * **Firefox:**√ 196 | * **Chrome:**√ 197 | * **Opera:**√ 198 | * **Safari:**√ 199 | * **其他:**未测试 200 | 201 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 plex 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # chfs-file-server 2 | 使用CuteHttpFileServer 搭建静态文件服务器 分享文件 图床 3 | 4 | 5 | 6 | ##### 下载地址:http://iscute.cn/chfs 7 | 8 | ##### 备用地址:本仓库 9 | 10 | ##### 文档备份:[备份](./CHFS.MD) 11 | 12 | 13 | 14 | ## Linux 15 | 16 | 下载 [chfs-linux-amd64-2.0.zip](http://iscute.cn/tar/chfs/2.0/chfs-linux-amd64-2.0.zip) 17 | 18 | ``` 19 | wget http://iscute.cn/tar/chfs/2.0/chfs-linux-amd64-2.0.zip 20 | ``` 21 | 22 | 解压 23 | 24 | ``` 25 | unzip chfs-linux-amd64-2.0.zip 26 | ``` 27 | 28 | 给执行权限 29 | 30 | ``` 31 | chmod +x chfs 32 | ``` 33 | 34 | 简单启动测试 35 | 36 | ``` 37 | //共享目录,监听端口号为8080 38 | chfs --path="./" --port=8080 39 | ``` 40 | 41 | 42 | 43 | ### 简单配置 44 | 45 | ``` 46 | # 监听端口 47 | port=666 48 | 49 | # 共享根目录,通过字符'|'进行分割 50 | path="/www" 51 | 52 | # 匿名用户具有只读权限(默认情况下匿名用户具有读写权限) 账户admin,密码为admin123,具有读写权限 53 | rule=::r|admin:ingress123:rw 54 | 55 | # 网页标题 56 | html.title=爱墙文件服务 57 | 58 | # 网页顶部的公告板。 59 | html.notice=内部资料,请勿传播 60 | 61 | ``` 62 | 63 | 64 | 65 | ### 完整配置 66 | 67 | ``` 68 | #--------------------------------------- 69 | # 请注意: 70 | # 1,如果不存在键或对应值为空,则不影响对应的配置 71 | # 2,配置项的值,语法如同其对应的命令行参数 72 | # //共享目录为D盘,监听端口号为8080 73 | # chfs --path="d:/" --port=8080 74 | # //通过配置文件进行配置,该文件可以不存在,待以后需要更改配置时使用 75 | # chfs --file="./cfg.ini" 76 | #--------------------------------------- 77 | 78 | # 监听端口 79 | port=666 80 | 81 | # 共享根目录,通过字符'|'进行分割 82 | # 注意: 83 | # 1,带空格的目录须用引号包住,如 path="c:a uply namefolder" 84 | # 2,可配置多个path,分别对应不同的目录 85 | path="/" 86 | 87 | 88 | # IP地址过滤 89 | allow= 90 | 91 | 92 | #----------------- 账户控制规则 ------------------- 93 | # 注意:该键值可以同时存在多个,你可以将每个用户的访问规则写成一个rule,这样比较清晰,如: 94 | # rule=::r 95 | # rule=root:123456:RW 96 | # rule=readonlyuser:123456:R 97 | # 匿名用户具有只读权限(默认情况下匿名用户具有读写权限) 账户admin,密码为admin123,具有读写权限 98 | # rule=::r|admin:admin123:rw 99 | rule=::r|admin:ingress123:rw 100 | 101 | # 用户操作日志存放目录,默认为空 102 | # 如果赋值为空,表示禁用日志 103 | log= 104 | # 网页标题 105 | html.title=爱墙文件服务 106 | 107 | # 网页顶部的公告板。可以是文字,也可以是HTML标签,此时,需要适用一对``(反单引号,通过键盘左上角的ESC键下面的那个键输出)来包住所有HTML标签。几个例子: 108 | # 1,html.notice=内部资料,请勿传播 109 | # 2,html.notice=`` 110 | # 3,html.notice=`

目录说明:

` 111 | html.notice=内部资料,请勿传播 112 | 113 | # 是否启用图片预览(网页中显示图片文件的缩略图),true表示开启,false为关闭。默认开启 114 | image.preview=true 115 | 116 | # 下载目录策略。disable:禁用; leaf:仅限叶子目录的下载; enable或其他值:不进行限制。 117 | # 默认值为 enable 118 | folder.download= 119 | 120 | #-------------- 设置生效后启用HTTPS,注意监听端口设置为443------------- 121 | # 指定certificate文件 122 | ssl.cert= 123 | # 指定private key文件 124 | ssl.key= 125 | # 设置会话的生命周期,单位:分钟,默认为30分钟 126 | session.timeout= 127 | 128 | ``` 129 | 130 | 131 | 132 | ## 其他搭建文件服务器的方法 133 | 134 | ### Nginx auto index 135 | 136 | ### MiniIO 137 | 138 | ### GoHttpServer 139 | 140 | -------------------------------------------------------------------------------- /cfg.ini: -------------------------------------------------------------------------------- 1 | # 监听端口 2 | port=666 3 | 4 | # 共享根目录,通过字符'|'进行分割 5 | path="/www" 6 | 7 | # 匿名用户具有只读权限(默认情况下匿名用户具有读写权限) 账户admin,密码为admin123,具有读写权限 8 | rule=::r|admin:ingress123:rw 9 | 10 | # 网页标题 11 | html.title=爱墙文件服务 12 | 13 | # 网页顶部的公告板。 14 | html.notice=内部资料,请勿传播 -------------------------------------------------------------------------------- /config_full.ini: -------------------------------------------------------------------------------- 1 | #--------------------------------------- 2 | # 请注意: 3 | # 1,如果不存在键或对应值为空,则不影响对应的配置 4 | # 2,配置项的值,语法如同其对应的命令行参数 5 | # //共享目录为D盘,监听端口号为8080 6 | # chfs --path="d:/" --port=8080 7 | # //通过配置文件进行配置,该文件可以不存在,待以后需要更改配置时使用 8 | # chfs --file="./cfg.ini" 9 | #--------------------------------------- 10 | 11 | # 监听端口 12 | port=666 13 | 14 | # 共享根目录,通过字符'|'进行分割 15 | # 注意: 16 | # 1,带空格的目录须用引号包住,如 path="c:a uply namefolder" 17 | # 2,可配置多个path,分别对应不同的目录 18 | path="/" 19 | 20 | 21 | # IP地址过滤 22 | allow= 23 | 24 | 25 | #----------------- 账户控制规则 ------------------- 26 | # 注意:该键值可以同时存在多个,你可以将每个用户的访问规则写成一个rule,这样比较清晰,如: 27 | # rule=::r 28 | # rule=root:123456:RW 29 | # rule=readonlyuser:123456:R 30 | # 匿名用户具有只读权限(默认情况下匿名用户具有读写权限) 账户admin,密码为admin123,具有读写权限 31 | # rule=::r|admin:admin123:rw 32 | rule=::r|admin:ingress123:rw 33 | 34 | # 用户操作日志存放目录,默认为空 35 | # 如果赋值为空,表示禁用日志 36 | log= 37 | # 网页标题 38 | html.title=爱墙文件服务 39 | 40 | # 网页顶部的公告板。可以是文字,也可以是HTML标签,此时,需要适用一对``(反单引号,通过键盘左上角的ESC键下面的那个键输出)来包住所有HTML标签。几个例子: 41 | # 1,html.notice=内部资料,请勿传播 42 | # 2,html.notice=`` 43 | # 3,html.notice=`

目录说明:

` 44 | html.notice=内部资料,请勿传播 45 | 46 | # 是否启用图片预览(网页中显示图片文件的缩略图),true表示开启,false为关闭。默认开启 47 | image.preview=true 48 | 49 | # 下载目录策略。disable:禁用; leaf:仅限叶子目录的下载; enable或其他值:不进行限制。 50 | # 默认值为 enable 51 | folder.download= 52 | 53 | #-------------- 设置生效后启用HTTPS,注意监听端口设置为443------------- 54 | # 指定certificate文件 55 | ssl.cert= 56 | # 指定private key文件 57 | ssl.key= 58 | # 设置会话的生命周期,单位:分钟,默认为30分钟 59 | session.timeout= 60 | -------------------------------------------------------------------------------- /download/chfs-linux-amd64-2.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlexPt/chfs-file-server/21afcc303467f8aa04a3a3d8d0baa59e3d773732/download/chfs-linux-amd64-2.0.zip -------------------------------------------------------------------------------- /download/chfs-linux-arm64-2.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlexPt/chfs-file-server/21afcc303467f8aa04a3a3d8d0baa59e3d773732/download/chfs-linux-arm64-2.0.zip -------------------------------------------------------------------------------- /download/chfs-mac-amd64-2.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlexPt/chfs-file-server/21afcc303467f8aa04a3a3d8d0baa59e3d773732/download/chfs-mac-amd64-2.0.zip -------------------------------------------------------------------------------- /download/chfs-windows-x64-2.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlexPt/chfs-file-server/21afcc303467f8aa04a3a3d8d0baa59e3d773732/download/chfs-windows-x64-2.0.zip -------------------------------------------------------------------------------- /download/chfs-windows-x86-2.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlexPt/chfs-file-server/21afcc303467f8aa04a3a3d8d0baa59e3d773732/download/chfs-windows-x86-2.0.zip -------------------------------------------------------------------------------- /download/gui-chfs-windows.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlexPt/chfs-file-server/21afcc303467f8aa04a3a3d8d0baa59e3d773732/download/gui-chfs-windows.zip -------------------------------------------------------------------------------- /runchfs.sh: -------------------------------------------------------------------------------- 1 | nohup ./chfs --file="./cfg.ini"& --------------------------------------------------------------------------------