2010-05-26 135 views
0

目前我正在進行此ftp傳輸。 http://msdn.microsoft.com/en-us/library/ms229715.aspx

使用ftpwebrequest傳輸ftp文件

我安裝我的服務器計算機IIS以對端口21 FTP站點和傳送文件的偉大工程。但是我想將ftp添加到服務器上的託管站點,這就是我在連接時遇到的問題。當我嘗試通過命令promt進行連接時,出現未知的主機錯誤。我已經改變了端口並在防火牆中打開它。即使我可以連接,我怎樣才能決定我想上傳到哪個文件夾?

回答

0
  1. 你仍然有連接問題與服務器。嘗試ping命令,看看你是否得到未知的主機錯誤。

  2. 對於上傳路徑問題,您需要提供您需要將文件上傳到的完整文件夾路徑。這裏有一個例子代碼:

    如果(!!!網站= NULL & & FOLDERPATH = NULL & &的FileName = NULL){
    FTPrequest =(的FtpWebRequest)FtpWebRequest.Create(新的URI(CompletePath));
    }

+0

像這樣的完整路徑,fpt://mydomain.com/Upload/Images/file.txt? – 2010-05-26 11:00:49

+0

我該如何ping ftp? – 2010-05-26 11:06:30

+0

是的..文件的完整路徑ftp://mydomain.com/Upload/Images/file.txt ..上面的代碼是我正在使用..關於ping ..檢查您是否可以使用正常訪問ftp服務器ping命令 – 2010-05-26 11:20:45

0

而如果服務器中存在的ping會告訴你,你應該嘗試遠程登錄直接給你測試的端口。

>> telnet url portnumber 
>> telnet ftp.mydomain.com 21 

如果遠程登錄成功後,你可以肯定的是,FTP端口處於激活狀態,並可以訪問,那麼你可以繼續解決您的問題。

最佳做法是

不要試圖一個自動化的過程, 你不能手動完成。

因此,telnet,然後從命令行測試ftp或使用諸如fireftp/cute ftp之類的實用程序,無論您選擇什麼。

如果你能夠得到這樣一個測試的工作,那麼你將能夠確定你的麻煩的確切原因。

一旦您成功測試了對您ftp站點的訪問權限, 將完整的URI傳遞給FtpWebRequest。

這是我爲測試而創建的一個函數。

public static void DoQueryAndUploadFile(string uri, string username, string password, string filename) 
{ 
    FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(uri + "/" + filename); 
    ftp.Method = WebRequestMethods.Ftp.UploadFile; 
    ftp.Credentials = new System.Net.NetworkCredential(username, password); 

    using(StreamWriter sw = new StreamWriter(ftp.GetRequestStream())) 
    { 
     // Do the query here then write to the ftp stream by iterating DataReader or other resultset, following code is just to demo concept: 
     for (int i = 0; i < 100; i++) 
     { 
       sw.WriteLine("{0},row-{1},data-{2}", i, i, i); 
     } 
     sw.Flush(); 
    } 
} 
+0

感謝您的這一點。我的連接工作,但它只有當我嘗試通過我的代碼連接它不會工作。我的事情是我用ftp發佈在iis上獲得了4個站點,ftp使用相同的ip和相同的端口,這就是爲什麼我使用虛擬名稱。但也許我錯了,虛擬名稱實際上需要註冊域名。 – 2010-05-27 07:55:44

0

後來我有一個問題,我有2個FTP對我的IIS使用相同的IP,所以我用虛擬的名字爲他們。我不知道如何連接到我的代碼,但這只是你去噢的那些愚蠢的時刻之一。

解決方案非常簡單,所以我想我會分享是否有任何問題與我一樣。關鍵是使用虛擬名稱作爲用戶名並用|分開然後真正寫出你的真實用戶名。

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://IP:PORT/PATH/THE FILE")); 
      ftpRequest.Method = WebRequestMethods.Ftp.UploadFile; 
      ftpRequest.Proxy = null; 
      ftpRequest.UseBinary = true; 
      ftpRequest.UsePassive = false; 
      ftpRequest.Credentials = new NetworkCredential("VIRTUAL NAME|MY USER", "MY PASSWORD");