2013-10-21 46 views
6

有人可以看看下面的代码,告诉我我做错了什么。我只是兜兜,,,任何指针十分赞赏FTP上传文件使用HTTP代理时不支持请求的FTP命令

public class FtpWebRequestUtil 
{ 
    private static string RemoteHost; 
    private static string RemoteFtpPath; 
    public static NetworkCredential Credential = new NetworkCredential(); 

    public FtpWebRequestUtil() 
    { 
    } 

    public FtpWebRequestUtil(string RemoteAddress, string RemotePath, string RemoteUser, string RemotePwd) 
    { 
     Credential.UserName = RemoteUser; 
     Credential.Password = RemotePwd; 
     RemoteHost = RemoteAddress; 
     RemoteFtpPath = RemotePath; 
    } 

    public string UploadFile(string localFilePath) 
    { 
     int startTime = Environment.TickCount; 
     // Console.WriteLine("Uploading File " + localFilePath); 
     try 
     { 
      FileInfo localFile = new FileInfo(localFilePath); //e.g.: c:\\Test.txt 
      byte[] buf = new byte[2048]; 
      int iWork; 
      string remoteFile = "ftp://" + RemoteHost + "/" + RemoteFtpPath + "/" + localFile.Name; 

      FtpWebRequest req = (FtpWebRequest) FtpWebRequest.Create(remoteFile); 
      // req.Proxy = 

      req.Credentials = Credential; 


      // FtpWebRequest req = (FtpWe 

      req.UseBinary = true; 
      req.KeepAlive = true; 
      req.Method = WebRequestMethods.Ftp.UploadFile; 
      StreamWriter myStreamWriter = new StreamWriter(req.GetRequestStream()); 
      myStreamWriter.Write(new StreamReader("TestFiles\\" + localFile.Name).ReadToEnd()); 
      myStreamWriter.Close(); 
      FtpWebResponse myFtpWebResponse = (FtpWebResponse) req.GetResponse(); 
      Console.WriteLine("Upload File Complete, status: " + myFtpWebResponse.StatusDescription); 

      myFtpWebResponse.Close(); 
      return "SUCCESS"; 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("There was an error connecting to the FTP Server."); 
      Console.WriteLine(ex.Message); 
      throw ex; 
     } 
     Console.WriteLine("Time taken for downloading file is " + (Environment.TickCount - startTime).ToString()); 
     return "FAILURE"; 
    } 


    ************************      ********************************* 
    FtpWebRequestUtil ftpClient = new FtpWebRequestUtil(FtpUrl, InputFolder, FtpUser, FtpPassword); 
    try 
    { 
     Thread.Sleep(5000); 
     ftpClient.UploadFile(UploadingFileName); 
       } 
     catch (Exception exception) 
     { 
      Assert.Fail(exception.Message); 
     } 
     finally 
     { 
      ftpClient = null; 
     } 
    } 
} 
+0

什么错误? – HappyLee

+0

使用http代理不支持ftp命令 – vishal

回答

8
req.Proxy = new WebProxy(); // initialize this FtpWebRequest property 
+0

确定尝试了,现在获取的对象引用未设置为实例): – vishal

+0

您在哪里添加了这行代码?发布代码 – HappyLee

+0

req.Proxy = new WebProxy(); req.Proxy = null; req.Credentials =凭证; //的FtpWebRequest REQ =(FtpWe req.UseBinary = TRUE; req.UsePassive = TRUE; req.KeepAlive = TRUE; 的StreamWriter myStreamWriter =新的StreamWriter(req.GetRequestStream()); – vishal

0

例外本身就是答案 - 它不支持。可能你有一些防止直接连接到FTP的HTTP代理。根据MS documentation,如果指定的代理是HTTP代理,则仅支持DownloadFile,ListDirectory和ListDirectoryDe​​tails命令 - 因此UploadFile不支持。

2

事实证明,只有RETRLISTNLST方法由System.Net.FtpWebRequestHTTP代理配置支持,也不要紧,你是不是在你的代码中设置代理:如果HTTP代理(未FTP代理服务器)在系统代理设置(例如:Internet选项\连接\局域网设置\代理服务器\为您的局域网使用代理服务器)中配置,则尝试上传到FTP服务器时会出现此错误。

解决方法是使用IE更改系统设置以关闭使用HTTP代理。但是如果你有机会到受影响的代码的解决方案是设置为空请求的Proxy特性,例如:

request.Proxy = null; 
+0

应该是正确答案,也可以+1。 –