You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下Progress 4GL(OpenEdge)CHUI11.6的FTP文件传输最简方法及命令

最简实现方式:调用Linux原生FTP命令

在Linux环境下用Progress 4GL做CSV文件的FTP传输,最省心的方案就是直接通过OS-COMMAND调用系统原生的ftp工具——毕竟Progress的这个命令就是为了对接系统命令行而生的,不需要折腾复杂的内置FTP模块,完全适配CHUI的命令行场景。

具体实现代码

下面是完整的4GL示例,针对单个CSV文件传输,你可以根据需求扩展为批量处理:

DEFINE VARIABLE cFtpServer    AS CHARACTER NO-UNDO INIT "ftp.example.com".
DEFINE VARIABLE cFtpUser      AS CHARACTER NO-UNDO INIT "your_ftp_username".
DEFINE VARIABLE cFtpPass      AS CHARACTER NO-UNDO INIT "your_ftp_password".
DEFINE VARIABLE cLocalCsvPath AS CHARACTER NO-UNDO INIT "/opt/app/generated/data.csv".
DEFINE VARIABLE cRemotePath   AS CHARACTER NO-UNDO INIT "/ftp/target/folder/data.csv".
DEFINE VARIABLE cFtpScript    AS CHARACTER NO-UNDO INIT "/tmp/ftp_transfer.tmp".

* 生成FTP执行脚本
OUTPUT TO VALUE(cFtpScript).
PUT UNFORMATTED "open " + cFtpServer SKIP.
PUT UNFORMATTED "user " + cFtpUser + " " + cFtpPass SKIP.
PUT UNFORMATTED "ascii" SKIP.  // CSV用ASCII模式传输足够,二进制模式也兼容
PUT UNFORMATTED "put " + cLocalCsvPath + " " + cRemotePath SKIP.
PUT UNFORMATTED "quit" SKIP.
OUTPUT CLOSE.

* 静默执行FTP命令
OS-COMMAND SILENT VALUE("ftp -n -s:" + cFtpScript).

* 清理临时脚本文件
OS-COMMAND SILENT VALUE("rm -f " + cFtpScript).

MESSAGE "CSV文件FTP传输完成!" VIEW-AS ALERT-BOX INFORMATION.

安全优化:避免明文密码

上面的脚本会把密码写入临时文件,存在安全隐患。你可以用Linux的.netrc文件存储FTP凭据来规避这个问题:

  1. 在运行Progress进程的用户home目录下创建.netrc,并设置严格权限:
touch ~/.netrc
chmod 600 ~/.netrc
  1. 编辑.netrc添加以下内容:
machine ftp.example.com login your_ftp_username password your_ftp_password
  1. 修改4GL代码,去掉脚本里的user行:
OUTPUT TO VALUE(cFtpScript).
PUT UNFORMATTED "open " + cFtpServer SKIP.
PUT UNFORMATTED "ascii" SKIP.
PUT UNFORMATTED "put " + cLocalCsvPath + " " + cRemotePath SKIP.
PUT UNFORMATTED "quit" SKIP.
OUTPUT CLOSE.

这样执行FTP命令时会自动读取.netrc里的凭据,不需要在脚本里明文暴露密码。

批量传输扩展

如果要传输目录下所有CSV文件,你可以动态生成put命令,或者用mput批量上传:

// 在脚本里添加本地目录切换和批量上传命令
PUT UNFORMATTED "lcd /opt/app/generated" SKIP.
PUT UNFORMATTED "mput *.csv" SKIP.

为什么不用Progress内置FTP函数?

Progress 11.6确实提供了NET-FTP系列函数(比如NET-FTP:CONNECT()、NET-FTP:PUT()),但这类函数需要额外配置环境,还要处理更多异常场景。对于简单的文件传输需求,调用系统ftp命令更轻量,完全适配CHUI的命令行工作流,不需要额外学习成本。

内容的提问来源于stack exchange,提问作者bb_man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:35:16