#125 - Scaricare un file FTP tramite FtpWebRequest
di Cristian Civera, in System.Net, 29 maggio 2009
Tra le molteplici classi offerte dal .NET Framework e in particolare nel namespace System.Net, è presente dalla versione 2.0 un'implementazione della classe WebRequest di nome FtpWebRequest. Come il nome suggerisce, la sua mansione è offrire le funzionalità minime per dialogare via FTP con un server remoto.
Poiché tale classe eredita da WebRequest, essa dispone di caratteristiche comuni quali autenticazione, uso di proxy o la possibilità di impostare header, attraverso le proprietà Credentials, Proxy e Headers. Per creare la classe quindi si sfrutta il factory associato al prefisso ftp://
FtpWebRequest GetRequest(Uri uri, string method) { FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(uri); request.KeepAlive = true; // Modalità passiva request.UsePassive = true; // Credenziali dell'utente corrente request.Credentials = CredentialCache.DefaultNetworkCredentials; request.Method = method; return request; }
Alla richiesta creata occorre associare un method che identifica l'azione che si richiede. In modo simile ad HTTP, anche FTP dispone di metodi per effettuare operazioni in remoto di cui è disponibile una lista attraverso le costanti WebRequestMethods.Ftp. Per esempio per scaricare un file si utilizza RETR, restituito da WebRequestMethods.Ftp.DownloadFile.
// Creo l'oggetto di richieta FTP FtpWebRequest request = GetRequest(new Uri("ftp://miosito.it/file.zip"), WebRequestMethods.Ftp.DownloadFile);
Creata la richiesta si può ottenere lo stream da essa (in caso di upload) o ottenere la risposta dal server per analizzarne lo stato e prelevare lo stream, che nel caso di un RETR è il file stesso richiesto.
// Ottengo subito la risposta using (FtpWebResponse response = request.GetResponse() as FtpWebResponse) { // Controllo lo stato della risposta if (response.StatusCode != FtpStatusCode.DataAlreadyOpen) throw new InvalidOperationException("Error while getting file: " + response.StatusDescription); using (Stream dataStream = response.GetResponseStream()) { // Leggo lo stream del file using (Stream localStream = File.Create("file.zip")) { // Travaso da uno stream all'altro dataStream.CopyToStream(localStream); } } }
Ottenuto lo stream, come si vede nel codice precedente, si può leggerlo o semplicemente travasarlo su un file locale attraverso l'extension method dello script #93.
Approfondimenti
-
#132 - Utilizzare una funzione come corpo di una lambda in LINQ to Objects
-
.NET Framework 4.0 beta 1: Windows Communication Foundation
-
#112 - Raggruppare i siti in IIS 7.0 in base all'ApplicationPool con LINQ to Objects
-
I nuovi Chart Controls di Microsoft per ASP.NET
-
LINQ to Reflection
-
Le problematiche più comuni di un'architettura M-V-VM con WPF
-
Dettagli sul metodo SelectDTO
-
#987 - La gestione della cache con il controllo LinqDataSource di ASP.NET 3.5
-
Windows Comunication Foundation al Basta! On Tour di Milano
-
Testare il mapping di Entity Framework
-
Comunicazione TCP tra Silverlight e WPF
-
#976 - ASP.NET ed Entity Framework: query di filtro ed ordinamento con EntityDataSource

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.