我使用以下代码将文件上传到sFTP
服务器。我使用 FileZilla 完成了测试上传,文件上传成功。
try
{
var client = new SftpClient(host, port, username, password);
client.Connect();
client.ChangeDirectory(workingDir);
var listDirectory = client.ListDirectory(workingDir);
foreach (var file in files)
{
var fileStream = new FileStream(file, FileMode.OpenOrCreate);
client.BufferSize = 4 * 1024; // bypass payload error large files
client.UploadFile(fileStream, Path.GetFileName(file));
Log.Info(string.Format("File [{0}] upload complete",file));
}
}
catch (Exception ex)
{
Log.Error(ex.Message);
}
但是在上面的代码中,我似乎无法完成上传,因为我收到以下错误:
没有这样的主人知道
那可能是因为我使用的是主机的Url值而不是IP? (我已经使用IP对另一台FtP服务器进行了测试,而且似乎也在运行)我想知道是不是这样的话?如果有,是否有办法让SftpClient
(Ssh.Net)处理网址?
答案 0 :(得分:5)
host参数可以是可以解析为IP地址的IP地址或主机名。它可能不是一个URL,这与技术观点完全不同。
一些完整的应用程序接受除了主机名之外的东西的事实很少:它将该字符串拆分为separat标记并连接到解析主机名时返回的IP地址。但这并不意味着您可以打开任何网络连接到URL或某个任意字符串。只能打开与IP地址的连接。
因此,如果您在某些“程序”中成功测试了sftp://ftp.example.com/ContactImport
之类的某些URL,这并不意味着您可以在内部将该字符串用作代码中的主机参数。您需要使用属于此类URL的主机名,因此在这种情况下为ftp.example.com
,因为只有该名称才能成功解析为IP地址。