由于delphi项目中,有个把本地文件上传到Linux服务器的需求。
在经过讨论,准备使用sftp 的方式上传文件。后端不需要开发java服务。其他方式实现:ftp应该是可以实现,但是SFTP使用加密传输认证信息和传输的数据,所以使用SFTP相对于FTP安全。
或者使用pscp.exe DOS命令行执行来上传文件。
所以我从 git上 https://github.com/pult/libssh2_delphi 下载这个项目。
用xe10 seattle 编译其中的demo 没有问题,但是在使用exe向服务器上传文件的时候,只要文件稍微超过几M,就会提示异常“ 无法立即完成一个非阻止性套接字操作”。
在度娘一圈,发现需要设置 client.Blocking = true ,应该是C#的写法。所以参考它,我在formcreate的时候加了 红色 那行,再次上传文件就正常了。
SFTP := TSFTPClient.Create(Self);
SFTP.DebugMode := True; // ouput debug info over Windows.OutputDebugString
SFTP.OnTransferProgress := OnProgress;
SFTP.OnAuthFailed := OnAuthFailed;
SFTP.OnCantChangeStartDir := OnCantChangeStartDir;
SFTP.OnKeybdInteractive := OnKeybdInteractive;
SFTP.BlockingMode := False; // 源码默认是true,应该改成false
StatusBar1.Panels[1].Text := 'libssh2 ver: ' + SFTP.LibraryVersion;