C# – 通过HTTP代理将文件上传到FTP
我正在尝试编写一个C#程序,将文件上传到通过代理服务器的FTP。
这是我写的代码:
public new bool Upload(string localFilePath, string pathUpload) { Stream FStream = null; bool retval = false; FileStream FlStream; try { FtpWebRequest FtpRequest = (FtpWebRequest) FtpWebRequest.Create(Uri + pathUpload); FtpRequest.Credentials = new NetworkCredential(User, Password); if (ProxyAddress != "" && ProxyAddress != null) { WebProxy ftpProxy = new WebProxy(); ftpProxy.Address = new System.Uri(ProxyAddress); ftpProxy.Credentials = new System.Net.NetworkCredential(ProxyUserId, ProxyPassword); FtpRequest.Proxy = ftpProxy; } FtpRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile; FStream = FtpRequest.GetRequestStream(); FileStream fs = File.OpenRead(localFilePath); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); fs.Close(); FStream.Write(buffer, 0, buffer.Length); FStream.Close(); FStream.Dispose(); return retval = true; } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.ToString()); return false; } }
如果我传递代理地址,则表示使用HTTP代理时不支持FTP命令。
我已经尝试过强制FtpRequest.Proxy = null
如其他地方所建议的那样(例如https://www.codeproject.com/Questions/332730/FTP-proxy-problem-in-Csharp-application )但是它给了我一个例外“无法连接到远程服务器“。
我也尝试使用WebClient
类而不是FtpWebRequest
但它给了我同样的问题。
在此先感谢您的帮助。
FtpWebRequest
不支持某些操作的HTTP代理,包括文件上载。 它在MSDN上清楚地记录在案 :
如果指定的代理是HTTP代理,则仅支持DownloadFile,ListDirectory和ListDirectoryDetails命令。
对CodeProject的评论简直是胡说八道。 你无法相信你在互联网上找到的一切。
WebClient
内部使用FtpWebRequest
,因此您也无法使用它。
没有办法通过标准.NET框架库的HTTP代理将文件上传到FTP。
您必须使用第三方FTP库。
例如,使用WinSCP .NET程序集 ,您可以使用:
// Setup session options SessionOptions sessionOptions = new SessionOptions { Protocol = Protocol.Ftp, HostName = "example.com", UserName = "user", Password = "mypassword", }; // Configure proxy sessionOptions.AddRawSettings("ProxyMethod", "3"); sessionOptions.AddRawSettings("ProxyHost", "proxy"); using (Session session = new Session()) { // Connect session.Open(sessionOptions); // Upload file string localFilePath = @"C:pathfile.txt"; string pathUpload = "/file.txt"; session.PutFiles(localFilePath, pathUpload).Check(); }
有关SessionOptions.AddRawSettings
的选项,请参阅原始设置 。
(我是WinSCP的作者)
上述就是C#学习教程:C# – 通过HTTP代理将文件上传到FTP分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1016832.html