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.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.