文章目录
相关软件windows自带第三方软件 chfs(CuteHttpFileServer)下载软件GUI方案 补充命令行方案命令行程序定位简单创建服务站点使用配置文件配置细节 使用软连接或符号链接等手段将向共享站点的根目录添加文件开机自启👺服务包装nssm包装使用powershell包装 服务启动chfs服务@检查服务运行情况 配置vbs脚本开机启动效果附:模板配置 资源管理器挂载网络驱动器👺允许http链接映射为磁盘驱动器理想效果 FAQ浏览器无法打开关于权限问题(访问控制)日志无法连接问题👺故障排查@引起chfs webdav无法被挂载的原因 其他 其他软件
相关软件
windows自带
IIS webdav windows自带的服务,启用相关功能后还要进行一系列的配置而且在WebDav客户端上传到站点的文件大小存在限制问题总体体验并不好,因此推荐第三方专业软件,灵活而且易于配置第三方软件
CuteHttpFileServer | iscute.cn👺 提供了windos端的命令行程序和图形界面程序,轻量而且易于配置 GitHub - hacdias/webdav: Simple Go WebDAV server. 专门设计支持WebDav的命令行程序(可能停更了) Caddy - The Ultimate Server with Automatic HTTPS (caddyserver.com) candy+webdav:Module http.handlers.webdav - Caddy Documentation (caddyserver.com)chfs(CuteHttpFileServer)
本文介绍chfs的用法,该软件比较简单易用,轻量灵活(免费)
几乎不用配置防火墙和共享站点的根目录的权限控制
同时给出http和webdav的链接,用浏览器就可以进行webdav传输,享受webDav的优点
浏览器所有设备几乎都有,因此可以不下在专门的客户端
下载软件
根据上述提供的官网,下载可执行文件 如果是计算机老手,可以考虑用命令行,更加轻量如果图方便或者是电脑新手,用GUI也是极好的(及其简单,可以将软件语言切换为中文,可以快速配置)复杂配置也建议用GUI比较方便 官网同时就是使用文档和使用说明书GUI方案
支持语言切换和配置导出 |
软件启动:配置完成后,点击左上角的按钮切换服务启动或关闭状态
右上角可以切换语言和配置导出,观察操作日志
至此就可以实现方便的局域网内传输
补充
命令行方案
这里假设用户有命令行使用经验 windows比如cmd或者powershell都可以这里我用powershell命令行程序定位
找到下载好的命令行可执行文件,比如D:\exes\chfs-windows-x64-3.1\chfs-windows-x64-3.1.exe
复制其所在目录,在命令行中定位到可执行文件
PS D:\exes\chfs-windows-x64-3.1> rvpa .\chfs-windows-x64-3.1.exePath----D:\exes\chfs-windows-x64-3.1\chfs-windows-x64-3.1.exePS D:\exes\chfs-windows-x64-3.1> sal chfs (rvpa .\chfs-windows-x64-3.1.exe)
这里我为文件chfs-windows-x64-3.1.exe起了个别名,方便后面引用该程序
sal chfs (rvpa .\chfs-windows-x64-3.1.exe)
也可以直接修改可执行文件的名字(或者配置别名到shell的配置文件中,今后在命令行任意位置都可以访问到该程序) 检查文档:chfs --help
PS D:\exes\chfs-windows-x64-3.1> chfs --helpUsage of D:\exes\chfs-windows-x64-3.1\chfs-windows-x64-3.1.exe: -file string Configuration file. -path string Shared directories, separated by '|'. (default ".") -port uint HTTP listening port. (default 80) -version Print version.
简单创建服务站点
例如:chfs -path D:\1WebDav\ -port 8084
D:\1WebDav
作为共享站点根目录,端口设置为8084
(能用就行,不能用时(和其他服务冲突时),稍微改改数值) PS D:\exes\chfs-windows-x64-3.1> chfs -path D:\1WebDav\ -port 8084************************************************** CUTE HTTP FILE SERVER 3.1 Homepage: http://chfs.iscute.cn Author: docblue@163.com************************************************** Shared path: D:\1WEBDAVListening port: 8084 Websites: http://192.168.1.46:8084 Webdav URLs: http://192.168.1.46:8084/webdav
使用配置文件配置细节
有时WebDav客户端(软件)需要使用用户名密码登录才可访问站点,这时我们要用配置文件配置更多细节
考虑到可维护性,建议从官网下载模板,然后根据模板内的注释说明配置需要的条目即可
iscute.cn/asset/chfs.ini您可以打开这个模板链接,复制全部内容,然后在找得到的地方(推荐在chfs所在目录下创建文件chfs.ini
)将模板内容粘贴到该文件,根据需要进行配置,样例放在末尾 根据配置文件,启动服务
chfs -file chfs.init
(文件名替换为你配置文件目录,如果在当前目录,则输入文件名即可) PS D:\exes\chfs-windows-x64-3.1> chfs -file .\chfs.ini************************************************** CUTE HTTP FILE SERVER 3.1 Homepage: http://chfs.iscute.cn Author: docblue@163.com************************************************** Shared path: D:\MINGW64Listening port: 8084 Config file: .\chfs.ini Websites: http://192.168.1.46:8084 Webdav URLs: http://192.168.1.46:8084/webdav2024-01-09 10:30:32 - 192.168.1.46 - user(tester) download '/33.txt'2024-01-09 10:30:41 - 192.168.1.46 - user(tester) download '/33.txt'2024-01-09 10:30:50 - 192.168.1.46 - user(tester) update text file:'33.txt'
使用软连接或符号链接等手段将向共享站点的根目录添加文件
如果将文件复制到共享站点根目录,可能会产生重复文件,造成资源浪费
可以考虑用软连接等方法尽可能减少对其他文件的影响
powershell和bash在各自平台上都可以创建类似的符号另外chfs支持添加不同目录到分享站点
将两个(或更多)独立文件夹添加到分享站点 |
这个操作对http有效,但是webdav仍然只显示一个首个目录
开机自启👺
如果您只是偶尔使用(局域网文件传输),那么不建议开机自启如果经常使用,则建议开启开机自启 GUI软件勾选开机自启以及随软件启动运行如果是命令行版本,可以用nssm包装成服务,这样开机就会自动运行服务包装
nssm包装
命令行版可以用nssm包装成服务运行(支持老的windows系统)
将nssm配置到环境变量,或者配置别名
执行nssm install chfs_service
,表示要安装(包装)一个名为chfs_service
的可执行程序
名字可以自行指定,关键是路径和参数(启动方式默认即可(自动(Automatic)))
填写完后点击安装
输入参数和命令行执行时添加的参数一样(可以是配置文件,配置参数也可以是直接写明在参数字符串中) |
使用powershell包装
New-Service (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn 参考文档给出了操作方法这里我们没有成功启动服务启动
重启计算机检查效果(会自动启动服务)或者直接打开service.msc
,找到刚才创建的服务,直接在面板中启动或者管理员权限,命令行中用nssm启动:nssm start chfs_service
chfs服务@检查服务运行情况
重启后相关服务会自行启动 |
使用powershell检查
PS C:\Users\cxxu\Desktop> Get-CimInstance -ClassName Win32_Service -Filter "Name='chfs_service'"ProcessId Name StartMode State Status ExitCode--------- ---- --------- ----- ------ --------0 chfs_service Auto Stopped OK 0
或者
PS C:\Users\cxxu\Desktop> gsv chfs*Status Name DisplayName------ ---- -----------Running chfs_service chfs_servicePS C:\Users\cxxu\Desktop> gsv chfs_service |select *UserName : LocalSystemDescription :DelayedAutoStart : FalseBinaryPathName : D:\exes\nssm\nssm.exeStartupType : AutomaticName : chfs_serviceRequiredServices : {}CanPauseAndContinue : FalseCanShutdown : TrueCanStop : TrueDisplayName : chfs_serviceDependentServices : {}MachineName : .ServiceName : chfs_serviceServicesDependedOn : {}StartType : AutomaticServiceHandle :Status : RunningServiceType : Win32OwnProcessSite :Container :
配置vbs脚本开机启动
windows有个startup目录,将脚本快捷方式放到里头可以开机自启,这里不赘述(另见它文)
脚本内容
Dim wsSet ws = Wscript.CreateObject("Wscript.Shell")ws.run "chfs.exe --file ./chfs.ini",vbhideWscript.quit
其中chfs.exe
需要替换为绝对路径(更改工作路径也行,但是独立使用该脚本是请执行替换)
效果
浏览器端支持上传下载删除搜索文件等操作,通常别人要发文件给你或者你要发文件给别人,都可以让对方打开浏览器输入你的ip和端口,进行基本的访问和传输操作至于webDav链接需要配置一些东西,给自己使用为主,例如手机上安装cx file explorer,将计算机挂载到手机上无论是哪种协议,都可以在线点播常见格式的视频,音频或则编辑文本可以修改文本文件或重命名 | ||
局域网内挂在webdav 如果是本机的WebDav协议,可以用localhost来代指具体的ip 如果要和局域网内的其他人共享,那么其他windows设备就不是用localhost,而是用服务器(本机)的ip了 | ||
附:模板配置
#---------------------------------------# 请注意:# 1,如果不存在键或对应值为空,则不影响对应的配置# 2,配置项的值,语法如同其对应的命令行参数#---------------------------------------# 监听端口port=8084# 共享根目录,通过字符'|'进行分割# 注意:# 1,带空格的目录须用引号包住,如 path="c:\a uply name\folder"# 2,可配置多个path,分别对应不同的目录path=D:\share path=C:\Users\cxxu#path="D:\MinGW64"# IP地址过滤allow=# 用户操作日志存放目录,默认为空# 如果赋值为空,表示禁用日志log=D:\exes\chfs_home\log# 网页标题html.title=chfs创建的文件中心站点@由配置文件控制细节# 网页顶部的公告板。可以是文字,也可以是HTML标签,此时,需要适用一对``(反单引号,通过键盘左上角的ESC键下面的那个键输出)来包住所有HTML标签。几个例子:# 1,html.notice=内部资料,请勿传播# 2,html.notice=`<img src="https://mat1.gtimg.com/pingjs/ext2020/qqindex2018/dist/img/qq_logo_2x.png" width="100%"/>`# 3,html.notice=`<div style="background:black;color:white"><p>目录说明:</p><ul>一期工程:一期工程资料目录</ul><ul>二期工程:二期工程资料目录</ul></div>`html.notice=# 是否启用图片预览(网页中显示图片文件的缩略图),true表示开启,false为关闭。默认关闭image.preview=true# 下载目录策略。disable:禁用; leaf:仅限叶子目录的下载; enable或其他值:不进行限制。# 默认值为 enablefolder.download=#-------------- 设置生效后启用HTTPS,注意监听端口设置为443-------------# 指定certificate文件ssl.cert=# 指定private key文件ssl.key=# 设置会话的生命周期,单位:分钟,默认为30分钟session.timeout=# 文件/目录删除模式:# 1: 安全删除:移动到系统回收站 [不是所有操作系统都支持,建议使用前进行测试。默认模式]# 2: 安全删除:移动到chfs的专属回收站: ~/.chfs_trashbin, 程序会删除存储超过1个月的文件# 3: 真正删除file.remove=1#----------------- ------------------------# 注意: 账户配置区域放置到配置文件的后面#------------------------------------------#----------------- 账户及控制规则 -------------------# [xxx] xxx即为账户名, 访客的用户名为guest# password 账户密码# rule.default 账户对所有的目录和文件的访问权限,但可以针对任意子目录进行重新设定访问权限,以覆盖默认的权限(设置成d,表示最高权限(读,写,删除))# rule.none 表示对哪些子目录设置为不可访问的权限,多个目录使用字符'|'分割,也可以分为多行。注意:该子目录本身也不可访问!# rule.r 表示对哪些子目录设置为读权限,多个目录使用字符'|'分割,也可以分为多行。注意: 该子目录本身不受影响,影响的只是它所包含的目录和文件!# rule.w 表示对哪些子目录设置为写权限,多个目录使用字符'|'分割,也可以分为多行。注意: 该子目录本身不受影响,影响的只是它所包含的目录和文件!# rule.d 表示对哪些子目录设置为最高访问权限,多个目录使用字符'|'分割,也可以分为多行。注意: 该子目录本身不受影响,影响的只是它所包含的目录和文件!## 示例:# [foo]# password=bar# rule.default=r# rule.none=d:\公司制度|d:\财务票据# rule.r=d:\施工项目\2021年# rule.r=d:\施工项目\2022年# rule.d=d:\个人目录\foo## 该账户名为foo,密码为bar,默认访问权限是读权限,但账户没有“d:\公司制度”和“d:\财务票据”的访问权限,且# 对“d:\施工项目\2021年”和“d:\施工项目\2021年”只有读权限,对“d:\个人目录\foo”有最高访问权限。##账户xxx,访客的用户名为guest[cxxu@dav]password=1rule.default=drule.none=rule.r=rule.w=rule.d=
资源管理器挂载网络驱动器👺
对于http协议链接,可能需要修改注册表,使得系统能够挂载http链接修改注册表以支持连接 HTTP协议 的 WebDAV_注册表http属性-CSDN博客这里给出一个命令行版本,操作更简单允许http链接映射为磁盘驱动器
下面的操作将是的windows能够将http链接映射为驱动器
首先,您需要使用管理员方式打开cmd
或者powershell
如果目标明确,执行类似以下操作的命令
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v BasicAuthLevel /t REG_DWORD /d 2
PS C:\repos\blogs> reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v BasicAuthLevel /t REG_DWORD /d 2值 BasicAuthLevel 已存在,要覆盖吗(Yes/No)? yes操作成功完成。
然后要重启系统
重新检查是否可以映射!
理想效果
FAQ
浏览器无法打开
首先检查端口号是否正确,默认80端口可以不用输入,否则要明确指出端口号
浏览器代理设置可能导致无法打开本地的http链接,例如proxy switchOmega,需要将本地ip(私有ip)过滤掉
插件默认过滤127.0.0.*但是可能不会过滤192.168.*或者用localhost:port
也可以访问,例如chfs提供的链接是: http://192.168.1.46:8084
,则浏览器输入 http://localhost:8084
也行