我们最近将工作中的ftp站点从 ftp://address 切换到 https://ftp.address,现在我检索文件的应用程序无法下载具有预期内容的文件。
我以前使用过FtpWebRequest,它已经工作了很多年。我现在正在尝试使用WebClient,它下载了一个文件,但它不是我需要的文本文件。相反,文件的内容原来是一些 HTML。
以前有效:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(getAppSetting("URI") + getAppSetting("FilePath") + args[0].ToString());
request.Method = WebRequestMethods.Ftp.DownloadFile;
setCredentials(request);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Changed code to handle https:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
WebClient request = new WebClient();
setCredentials(request);
string file = request.DownloadString(getAppSetting("URI") + getAppSetting("FilePath") + args[0].ToString());
结果是一个下载的文件,但它包含 HTML。我希望在我从中提取的网站上包含文件的内容。
经过几周的研究,我终于找到了我需要做什么,答案很简单。我发现我们的新网站使用SSH,所以我通过我的nugent包安装了 SSH.Net 到Visual Studio,并添加了"使用Renci.SshNet;"。我使用以下代码将文件下载到本地驱动器:
using (SftpClient sftp = new SftpClient("ftp.website.com", 22,"username", "password")
{
sftp.Connect();
if (sftp.IsConnected)
{
using (Filestream fs = new FileStream("Output.txt", FileMode.Create))
{
sftp.DownloadFile("/file/Client/Input.txt", fs);
}
}
sftp.Disconnect();
}
这非常有效。我的文件不再下载为 HTML 文件,我得到了我想要的输出。我希望这可以为其他人节省很多时间。