【发布时间】:2017-02-06 14:29:44
【问题描述】:
我正在使用以下代码将文件上传到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)处理Url?
【问题讨论】:
-
host参数可以是IP地址,也可以是可以解析为IP地址的主机名。它可能显然不是一个 URL,那是完全不同的东西。
-
@arkascha
ftp.staging.blahblahblah.com/ContactImport看起来不像一个名字? FileZilla 似乎没有问题,但我的程序有。 -
不,这在我看来就像一个字符串,可以解释为部分主机名、部分路径。它既不是 URL 也不是主机名。主机名将是
ftp.staging.blahblahblah.com。 -
一些完整的应用程序接受除主机名之外的其他内容这一事实说明不多:它将字符串分割成单独的标记并连接到解析主机名时返回的 IP 地址。您不能打开任何到 URL 或任意字符串的网络连接,只能到 IP 地址。
-
@arkascha 你是对的。我应该将“/ContactImport”添加到单独的参数中。它不应该是主机名的一部分。您可以将其发布为答案。