C#-通过HTTP代理将文件上载到FTP

C#-通过HTTP代理将文件上载到FTP,c#,proxy,ftp,http-proxy,ftpwebrequest,C#,Proxy,Ftp,Http Proxy,Ftpwebrequest,我正试图编写一个C程序,通过代理将文件上传到FTP 以下是我编写的代码: public new bool Upload(string localFilePath, string pathUpload) { Stream FStream = null; bool retval = false; FileStream FlStream; try { FtpWebRequest FtpRequest = (F

我正试图编写一个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
(例如),但它给了我一个异常“无法连接到远程服务器”

我还尝试使用
WebClient
类而不是
FtpWebRequest
,但它给了我同样的问题


提前感谢您的帮助。

对于某些操作,包括文件上载,
FtpWebRequest
不支持HTTP代理。很明显:

如果指定的代理是HTTP代理,则仅支持DownloadFile、ListDirectory和ListDirectoryDetails命令

对CodeProject的评论简直是胡说八道。你不能相信你在互联网上找到的一切

WebClient
在内部使用
FtpWebRequest
,因此您也不能使用它

使用标准的.NET framework库,无法通过HTTP代理将文件上载到FTP

您必须使用第三方FTP库


例如,对于,您可以使用:

// 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:\path\file.txt";
    string pathUpload = "/file.txt";
    session.PutFiles(localFilePath, pathUpload).Check();
}
有关的选项,请参见

(我是WinSCP的作者)