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

Delphi 10.4 借助PPK搭建SFTP客户端及原生组件实现上传方案问询

Delphi SFTP连接相关问题解答

原生支持情况说明

Delphi全版本均未内置原生SFTP连接组件,即使是高价的商业授权版本,标准组件库也未包含对SFTP协议的官方支持,这是目前的客观现状。

自带组件实现方案

无需购买第三方付费组件,通过Delphi自带组件即可实现SFTP文件上传,常用实现路径如下:

  • 调用系统原生sftp命令行工具实现:Windows 10 1809及以上版本、所有主流Linux、macOS均默认预装sftp命令行客户端,你可以通过Delphi自带的TProcess组件调用该命令,通过构造执行参数、重定向输入输出流的方式完成身份认证、文件上传全流程。简单实现参考代码如下:
uses
  Process, SysUtils;

procedure UploadSFTPFile(const LocalFilePath, RemoteTargetDir, SFTPHost, SFTPUsername, SFTPPassword: string);
var
  SFTPProcess: TProcess;
begin
  SFTPProcess := TProcess.Create(nil);
  try
    SFTPProcess.Executable := 'sftp';
    // 配置非批量模式、从标准输入读取指令
    SFTPProcess.Parameters.AddStrings(['-o', 'BatchMode=no', '-b', '-']);
    SFTPProcess.Parameters.Add(Format('%s@%s', [SFTPUsername, SFTPHost]));
    SFTPProcess.Options := [poUsePipes, poNoConsole, poWaitOnExit];
    SFTPProcess.Execute;
    // 写入密码、上传指令、退出指令到进程输入流
    SFTPProcess.Input.WriteBuffer(Pointer(SFTPPassword + #10)^, Length(SFTPPassword) + 1);
    SFTPProcess.Input.WriteBuffer(Pointer(Format('put "%s" "%s"%s', [LocalFilePath, RemoteTargetDir, #10]))^, 
      Length(Format('put "%s" "%s"%s', [LocalFilePath, RemoteTargetDir, #10])));
    SFTPProcess.Input.WriteBuffer(Pointer('exit'#10)^, 5);
  finally
    SFTPProcess.Free;
  end;
end;

该方案开发成本极低,适合简单的单文件/批量文件上传场景,使用时注意自行补充进程退出码校验、异常捕获逻辑即可。

  • 基于自带Indy组件+OpenSSL封装自定义实现:Delphi标准组件库自带Indy网络组件集,同时内置OpenSSL接口绑定,你可以基于Indy的TCP通信能力加OpenSSL的加密支持,自行实现SFTP协议的交互逻辑,该方案开发成本较高,适合有复杂SFTP操作需求的场景。

内容的提问来源于stack exchange,提问作者fisi-pjm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 12:15:00