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凭据来规避这个问题:
- 在运行Progress进程的用户home目录下创建
.netrc,并设置严格权限:
touch ~/.netrc chmod 600 ~/.netrc
- 编辑
.netrc添加以下内容:
machine ftp.example.com login your_ftp_username password your_ftp_password
- 修改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
相关产品推荐
相关产品推荐

