2012-06-03 61 views
0

我有一個TXT文件,我必須FTP它到FTP siteFTP .txt文件到FTP站點使用C#

我無法找到一個完整的教程,可以幫助我編寫代碼。有人能指點我一個很好的教程,或一些代碼開始?

+3

谷歌的第一個結果http://msdn.microsoft.com/en-us/library/ms229715.aspx,你有什麼嘗試? –

+0

有沒有辦法讓我知道文件是否成功上傳? – Illep

+0

更多然後檢查它是否存在,如果大小相應,你有幾種檢查方法是否正確。您可以再次下載並檢查它是否具有相同的校驗和。 – albertjan

回答

3

This看起來不錯。

+0

如何知道文件是否成功上傳? – Illep

+0

讓我困惑的是爲什麼設置FTP地址時包含文件名:... WebRequest.Create(「ftp://www.contoso.com/test.htm」)。當我連接到FTP站點時,我不在尋找特定的文件;我想在那裏發送一個。那麼什麼是「test.htm」?這是FTP站點上的文件嗎?我發送後會發送的文件是? 我的問題是,當我到達我們去的部分Request.GetRequestStream()時,如果我只是提供我的ftp地址,就會炸燬我:「ftp://127.0.0.1/」,說它無效。如果我提供一個文件名,我會得到一個550錯誤(文件不可用)。 –

+0

所以我知道地址必須是一個看起來像這樣的有效URI(在這裏減去多餘的空格):「f t p://127.0.0.1/mytestfile.txt」。如果你離開文件名,它會說Uri不適合這種操作。文件名是你想在遠端調用它的名字,它基本上設置了傳輸。我得到的550錯誤是由於授權問題導致的,無論是在IIS中還是在文件系統級別。我可以通過使用FileZilla FTP客戶端訪問該站點來找到這些信息,該客戶端向您展示了談話內容,其中包含所有線索。 –

3

正如我在評論中發佈的,你可以看到這個link關於如何上傳文件到FTP服務器的示例。從鏈接

代碼:

using System; 
using System.IO; 
using System.Net; 
using System.Text; 

namespace Examples.System.Net 
{ 
    public class WebRequestGetExample 
    { 
     public static void Main() 
     { 
      // Get the object used to communicate with the server. 
      FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm"); 
      request.Method = WebRequestMethods.Ftp.UploadFile; 

      // This example assumes the FTP site uses anonymous logon. 
      request.Credentials = new NetworkCredential ("anonymous","[email protected]"); 

      // Copy the contents of the file to the request stream. 
      StreamReader sourceStream = new StreamReader("testfile.txt"); 
      byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); 
      sourceStream.Close(); 
      request.ContentLength = fileContents.Length; 

      Stream requestStream = request.GetRequestStream(); 
      requestStream.Write(fileContents, 0, fileContents.Length); 
      requestStream.Close(); 

      FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

      Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription); 

      response.Close(); 
      } 
     } 
    } 
} 

要驗證該文件正確上傳,您可以檢查的響應,它有狀態說明和的StatusCode屬性。

或者,您可以再次調用FTP服務器,在此設置方法request.Method = WebRequestMethods.Ftp.ListDirectory;。這將返回FTP服務器上的文件列表。

當然,這不會驗證文件是否正確上傳,只是存在一個同名的文件。

我希望這能回答你的問題。

+0

我可以打印結果到「控制檯」('request.Method = WebRequestMethods.Ftp.ListDirectory') – Illep

+0

否方法是請求的屬性,當您設置它並獲取ResponseStream時,您將得到一個文件名列表。 –

+0

@Illep,看看這個鏈接http://social.msdn.microsoft。com/Forums/en-US/ncl/thread/079fb811-3c55-4959-85c4-677e4b20bea3它顯示如何獲取FTP服務器上的文件列表。 –

0

你也可以試試這個代碼,也適用於其他文件擴展名。

string ftpUrl = "ftp://server//foldername/fileName.ext"; 
string fileToUploaded = "c:/fileName.ext"; 
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl); 
request.Proxy = new WebProxy(); //-----Proxy bypassing(The requested FTP command is not supported when using HTTP proxy) 
request.Method = WebRequestMethods.Ftp.UploadFile; 
       request.Credentials = new NetworkCredential(ftpUsername, ftpPassword); 
       using (var requestStream = request.GetRequestStream()) 
       { 
        using (var input = File.OpenRead(fileToBeUploaded)) 
        { 
         input.CopyTo(requestStream); 
        } 
       } 

嘗試流式傳輸數據,而不是單獨加載到內存中。另外using聲明有助於完美地部署資源。