目前我正在進行此ftp傳輸。 http://msdn.microsoft.com/en-us/library/ms229715.aspx
使用ftpwebrequest傳輸ftp文件
我安裝我的服務器計算機IIS以對端口21 FTP站點和傳送文件的偉大工程。但是我想將ftp添加到服務器上的託管站點,這就是我在連接時遇到的問題。當我嘗試通過命令promt進行連接時,出現未知的主機錯誤。我已經改變了端口並在防火牆中打開它。即使我可以連接,我怎樣才能決定我想上傳到哪個文件夾?
目前我正在進行此ftp傳輸。 http://msdn.microsoft.com/en-us/library/ms229715.aspx
使用ftpwebrequest傳輸ftp文件
我安裝我的服務器計算機IIS以對端口21 FTP站點和傳送文件的偉大工程。但是我想將ftp添加到服務器上的託管站點,這就是我在連接時遇到的問題。當我嘗試通過命令promt進行連接時,出現未知的主機錯誤。我已經改變了端口並在防火牆中打開它。即使我可以連接,我怎樣才能決定我想上傳到哪個文件夾?
你仍然有連接問題與服務器。嘗試ping命令,看看你是否得到未知的主機錯誤。
對於上傳路徑問題,您需要提供您需要將文件上傳到的完整文件夾路徑。這裏有一個例子代碼:
如果(!!!網站= NULL & & FOLDERPATH = NULL & &的FileName = NULL){
FTPrequest =(的FtpWebRequest)FtpWebRequest.Create(新的URI(CompletePath));
}
而如果服務器中存在的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();
}
}
感謝您的這一點。我的連接工作,但它只有當我嘗試通過我的代碼連接它不會工作。我的事情是我用ftp發佈在iis上獲得了4個站點,ftp使用相同的ip和相同的端口,這就是爲什麼我使用虛擬名稱。但也許我錯了,虛擬名稱實際上需要註冊域名。 – 2010-05-27 07:55:44
後來我有一個問題,我有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");
像這樣的完整路徑,fpt://mydomain.com/Upload/Images/file.txt? – 2010-05-26 11:00:49
我該如何ping ftp? – 2010-05-26 11:06:30
是的..文件的完整路徑ftp://mydomain.com/Upload/Images/file.txt ..上面的代碼是我正在使用..關於ping ..檢查您是否可以使用正常訪問ftp服務器ping命令 – 2010-05-26 11:20:45