2010-10-28 176 views
1

我的文章標題幾乎說明了一切:如何使用.NET通過SSL通過FTP從FTP服務器下載文件?我已經讀了一下,有幾個第三方組件購買了這個功能。如何使用.NET通過SSL通過SSL從FTP服務器下載文件?

這個交易是,這是一個非常specefic的需要,並不會增長太多,所以如果從FTP服務器上使用FTP通過SSL從FTP服務器下載可以使用.NET Framework(即System.Net命名空間或某事),那麼這將是最好的。我不需要大量的功能,但如果由於某種原因編碼對付安全的FTP服務器是一場噩夢,或者無法通過.NET Framework BCL進行編譯,那很容易知道,因爲第三方.dll可能是最好的。

謝謝!

回答

5

像這樣:

var request = (FtpWebRequest)WebRequest.Create("ftp://..."); 
request.EnableSsl = true; 
using (var response = request.GetResponse()) 
using (var data = response.GetResponseStream()) { 
    ... 
} 
+0

我需要傳遞信條 - >我使用「request.Credentials = New Net.NetowrkCredential(」user「,」pass「)」嗎?另外,我得到了一系列的sftp.domain.com,並且在使用您提供的代碼時,它聲明它是「一個無效的URI」(但是,我可以通過.NET之外的FTP/SFTP客戶端應用程序訪問它,所以我知道該URI是有效的)。如果我嘗試「sftp://domain.com」,我得到「URI前綴無法識別」異常。這些(2)項目的任何想法? – atconway 2010-10-29 18:00:03

+0

我有一種感覺SFTP不支持通過FtpWebRequest類根據此鏈接:http://connect.microsoft.com/VisualStudio/feedback/details/181054/add-support-for-ftps-and-sftp-uris- for-webrequest – atconway 2010-10-29 18:09:59

+0

@atconway:試試URI,ftp:// sftp.domain.com。 – SLaks 2010-10-29 18:36:49

4

下面是最終的VB.NET代碼我使用:

Dim request As System.Net.FtpWebRequest = DirectCast(WebRequest.Create(New Uri("ftp://sftp.domain.com/myFile.txt")), System.Net.FtpWebRequest) 
    request.Method = WebRequestMethods.Ftp.DownloadFile 
    request.EnableSsl = True 
    request.Credentials = New Net.NetworkCredential("username", "password") 
    request.UsePassive = True 
    Dim response As System.Net.FtpWebResponse = DirectCast(request.GetResponse(), System.Net.FtpWebResponse) 

全部細節在這裏:

下載FTP文件使用基於SSL的FTP(SFTP )在.NET中:
http://allen-conway-dotnet.blogspot.com/2010/11/download-ftp-files-using-ftp-over-ssl.html

0

如果你需要更多的功能,如隱含的SSL,哈希驗證,或者只是更清晰的語法,你可以使用Ftp.dll FTP/FTPS client

using(Ftp ftp = new Ftp()) 
{ 
    ftp.Connect("ftp.server.com");      
    ftp.Login("user", "password"); 

    ftp.ChangeFolder("downloads"); 
    ftp.Download("report.txt", @"c:\report.txt"); 

    ftp.Close(); 
} 

請注意,這是一個商業產品,我的作者。