Azure Functions基于.NET Core向SFTP服务器发送文件的方案咨询
.NET Core 环境 SFTP 连接方案
你之前看到的SSH.NET仅兼容.NET Framework是旧版本的说明,目前最新稳定版的SSH.NET已经支持.NET Standard 2.0,完全适配所有LTS版本的.NET Core、.NET 5+以及Azure Functions的进程内/隔离进程运行时,直接安装SSH.NET NuGet包即可使用。
如果有特殊场景无法使用SSH.NET,可选替代方案为WinSCP-NetStandard NuGet包,同样兼容.NET Core环境。
SFTP 连接后文件上传实现步骤
以SSH.NET为例,上传文件的代码逻辑如下:
using Renci.SshNet; using System.IO; // 1. 配置连接参数 var sftpHost = "SFTP服务器地址"; var sftpPort = 22; var sftpUser = "登录账号"; var sftpPwd = "登录密码"; // 若使用密钥认证,可替换为PrivateKeyAuthenticationMethod var connectionInfo = new ConnectionInfo(sftpHost, sftpPort, sftpUser, new PasswordAuthenticationMethod(sftpUser, sftpPwd)); // 2. 建立连接并上传文件 using (var sftpClient = new SftpClient(connectionInfo)) { sftpClient.Connect(); // 本地待上传文件路径 var localFile = @"C:\local\test.txt"; // 服务器端目标存储路径,需确保对应目录存在 var remotePath = "/upload/test.txt"; using (var fs = File.OpenRead(localFile)) { // 第三个参数为true时表示覆盖服务器端已存在的同名文件 sftpClient.UploadFile(fs, remotePath, true); } sftpClient.Disconnect(); }
注意事项
- 若你使用的是消费级计划的Azure Functions,需要将函数的所有出站IP添加到SFTP服务器的IP白名单中,同时确保服务器22端口对公网开放
- 大文件上传建议开启分块上传逻辑,同时根据你使用的Azure Functions计划类型调整最大执行超时时间,避免上传过程中函数被强制终止
- 生产环境建议使用密钥认证替代密码认证,安全性更高
内容的提问来源于stack exchange,提问作者azureLover
相关产品推荐
相关产品推荐

