JOYZL Watcher 用于将分布在多个设备或计算机中的文件,自动上传归集到服务器中。 工作原理为监视指定目录中生成的新文件, 如果文件名符合指定格式(可配置正则表达式), 则从文件名中提取代码(可配置正则表达式提取代码字符,例如产品编号), 然后上传到指定服务器。
适用报告和结果性文件, 例如:工厂检验设备输出的检验结果性文件,目录或文件名中具有产品编号, 并且文件生成后不再修改。
不适用经常性修改的文件, 例如:增量写入的日志文件、关系数据库的数据文件, 也不适用于视频等大型文件。
上传文件通过标准的 HTTP POST 请求,以 multipart/form-data 格式上传, 其中包含 code 参数,值为从文件名中提取的代码, file 为文件内容; WEB 服务器接收并保存文件后返回 200 OK 即表示成功, 返回其它任何状态码均表示失败,会稍后重试上传。
JOYZL Server 内置了文档归集服务端的功能实现,可作为文件服务端部署。
watcher.properties 为监视程序配置文件。 其中设置监视的目录(WATCH),提交文件的服务器(HTTP_SERVER), 文件匹配模型配置文件(MODEL),客户端编号(NUMBER); 软件界面会显示这些内容,双击可更改配置。 界面关闭后监视程序会在后台运行。
LOG_EXPIRES=30
WATCH=D\:\\JOYZL SCADA DEMO\\test
HTTP_SERVER=http\://127.0.0.1/archive/file
TITLE=JOYZL Watcher
MODEL=patterns\\ANY.xml
UPLOAD_EXPIRES=3600
STABLE_EXPIRES=3600
LOG_LEVEL=3
NUMBER=NP003
patterns 文件夹中是可选用于识别文件的配置文件。 文件识别配置文件以XML格式组织,格式如下所示。
<model>
<name>任意文件</name>
<file>
<name>(?:^|[\\/])([\x20-\x7E]+)\.\w+$</name>
<code>.*?([^\\/]+)\.</code>
<example>2025-10-22\YDA13115101GSK216364.ext</example>
</file>
<file>
...
</file>
</model>每个匹配模型可指定多个文件(file)元素,其中必须包含 name 和 code 元素,元素内容分别为文件名匹配和提取代码的正则表达式。 当监视程序发现新文件时,会从指定的监视目录开始,将整个相对路径用于执行正则表达式匹配。 如果要同时兼容 Windows 和 Linux 操作系统,请确保正则表达式适配两种路径分隔符。
匹配单个文件: 如果匹配模型指向文件名,则按单个文件匹配。
假设监视目录为 D:\reports
正则表达式匹配文件名并从文件名提取编号(排除扩展名)
某程序在目录中生成了报告文件 D:\reports\20251208\JOYZL-1234567890.pdf
相对路径为 20251208\JOYZL-1234567890.pdf
首先执行文件名匹配,使用 name 中的正则表达式
然后执行代码提取,使用 code 中的正则表达式
如果匹配和提取均成功,文件排入待上传队列。
匹配多个文件: 如果匹配模型指向目录名,则会匹配目录下的所有文件。
假设监视目录为 D:\reports
正则表达式匹配目录名并以目录名为编号
某程序在目录中生成了两个报告文件 D:\reports\JOYZL-1234567890\r1.pdf 和 D:\reports\JOYZL-1234567890\r2.pdf
相对路径为 JOYZL-1234567890\r1.pdf 和 JOYZL-1234567890\r2.pdf
首先执行文件名匹配,使用 name 中的正则表达式
然后执行代码提取,使用 code 中的正则表达式
如果匹配和提取均成功,两个文件排入待上传队列
两个文件关联同一个编码 JOYZL-1234567890
- 仅上传监视软件启动之后产生的文件,并且文件名符合指定的规则;
- 监视软件会检查文件是否写入完成,因此会等待文件稳定后开始上传;
- 如果上传之后文件被修改,监视软件不会再次上传;
- 如果上传之前文件被删除,监视软件会忽略此文件;
- 如果已上传文件被删除,监视软件忽略此行为。
可通过UDP端口发现局域网中部署的所有 JOYZL Watcher 程序; 可通过UDP端口远程配置 JOYZL Watcher 程序参数; 这为大量部署时提供维护配置便利。
JOYZL SCADA Station 客户端集成了发现与远程配置桌面工具, 访问 scada.joyzl.com 获取更多信息。
本软件根据 Apache License 2.0 开源,详见 LICENSE 文件。