FtpWebRequest Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Implementa un client FTP (File Transfer Protocol).
public ref class FtpWebRequest sealed : System::Net::WebRequest
public sealed class FtpWebRequest : System.Net.WebRequest
type FtpWebRequest = class
inherit WebRequest
Public NotInheritable Class FtpWebRequest
Inherits WebRequest
- Ereditarietà
Esempio
Nell'esempio di codice seguente viene illustrato l'eliminazione di un file da un server FTP.
public static bool DeleteFileOnServer(Uri serverUri)
{
// The serverUri parameter should use the ftp:// scheme.
// It contains the name of the server file that is to be deleted.
// Example: ftp://contoso.com/someFile.txt.
//
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
return false;
}
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
request.Method = WebRequestMethods.Ftp.DeleteFile;
FtpWebResponse response = (FtpWebResponse) request.GetResponse();
Console.WriteLine("Delete status: {0}",response.StatusDescription);
response.Close();
return true;
}
Nell'esempio di codice seguente viene illustrato il download di un file da un server FTP usando la WebClient classe .
public static bool DisplayFileFromServer(Uri serverUri)
{
// The serverUri parameter should start with the ftp:// scheme.
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
return false;
}
// Get the object used to communicate with the server.
WebClient request = new WebClient();
// This example assumes the FTP site uses anonymous logon.
request.Credentials = new NetworkCredential ("anonymous","janeDoe@contoso.com");
try
{
byte [] newFileData = request.DownloadData (serverUri.ToString());
string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
Console.WriteLine(fileString);
}
catch (WebException e)
{
Console.WriteLine(e.ToString());
}
return true;
}
Nell'esempio di codice seguente viene illustrato l'uso di operazioni asincrone per caricare un file in un server FTP.
using System;
using System.Net;
using System.Threading;
using System.IO;
namespace Examples.System.Net
{
public class FtpState
{
private ManualResetEvent wait;
private FtpWebRequest request;
private string fileName;
private Exception operationException = null;
string status;
public FtpState()
{
wait = new ManualResetEvent(false);
}
public ManualResetEvent OperationComplete
{
get {return wait;}
}
public FtpWebRequest Request
{
get {return request;}
set {request = value;}
}
public string FileName
{
get {return fileName;}
set {fileName = value;}
}
public Exception OperationException
{
get {return operationException;}
set {operationException = value;}
}
public string StatusDescription
{
get {return status;}
set {status = value;}
}
}
public class AsynchronousFtpUpLoader
{
// Command line arguments are two strings:
// 1. The url that is the name of the file being uploaded to the server.
// 2. The name of the file on the local machine.
//
public static void Main(string[] args)
{
// Create a Uri instance with the specified URI string.
// If the URI is not correctly formed, the Uri constructor
// will throw an exception.
ManualResetEvent waitObject;
Uri target = new Uri (args[0]);
string fileName = args[1];
FtpState state = new FtpState();
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(target);
request.Method = WebRequestMethods.Ftp.UploadFile;
// This example uses anonymous logon.
// The request is anonymous by default; the credential does not have to be specified.
// The example specifies the credential only to
// control how actions are logged on the server.
request.Credentials = new NetworkCredential ("anonymous","janeDoe@contoso.com");
// Store the request in the object that we pass into the
// asynchronous operations.
state.Request = request;
state.FileName = fileName;
// Get the event to wait on.
waitObject = state.OperationComplete;
// Asynchronously get the stream for the file contents.
request.BeginGetRequestStream(
new AsyncCallback (EndGetStreamCallback),
state
);
// Block the current thread until all operations are complete.
waitObject.WaitOne();
// The operations either completed or threw an exception.
if (state.OperationException != null)
{
throw state.OperationException;
}
else
{
Console.WriteLine("The operation completed - {0}", state.StatusDescription);
}
}
private static void EndGetStreamCallback(IAsyncResult ar)
{
FtpState state = (FtpState) ar.AsyncState;
Stream requestStream = null;
// End the asynchronous call to get the request stream.
try
{
requestStream = state.Request.EndGetRequestStream(ar);
// Copy the file contents to the request stream.
const int bufferLength = 2048;
byte[] buffer = new byte[bufferLength];
int count = 0;
int readBytes = 0;
FileStream stream = File.OpenRead(state.FileName);
do
{
readBytes = stream.Read(buffer, 0, bufferLength);
requestStream.Write(buffer, 0, readBytes);
count += readBytes;
}
while (readBytes != 0);
Console.WriteLine ("Writing {0} bytes to the stream.", count);
// IMPORTANT: Close the request stream before sending the request.
requestStream.Close();
// Asynchronously get the response to the upload request.
state.Request.BeginGetResponse(
new AsyncCallback (EndGetResponseCallback),
state
);
}
// Return exceptions to the main application thread.
catch (Exception e)
{
Console.WriteLine("Could not get the request stream.");
state.OperationException = e;
state.OperationComplete.Set();
return;
}
}
// The EndGetResponseCallback method
// completes a call to BeginGetResponse.
private static void EndGetResponseCallback(IAsyncResult ar)
{
FtpState state = (FtpState) ar.AsyncState;
FtpWebResponse response = null;
try
{
response = (FtpWebResponse) state.Request.EndGetResponse(ar);
response.Close();
state.StatusDescription = response.StatusDescription;
// Signal the main application thread that
// the operation is complete.
state.OperationComplete.Set();
}
// Return exceptions to the main application thread.
catch (Exception e)
{
Console.WriteLine ("Error getting response.");
state.OperationException = e;
state.OperationComplete.Set();
}
}
}
}
Commenti
Importante
Non è consigliabile usare la FtpWebRequest classe per il nuovo sviluppo. Per altre informazioni e alternative a FtpWebRequest, vedere WebRequest non deve essere usato in GitHub.
Per ottenere un'istanza di FtpWebRequest, usare il Create metodo . È anche possibile usare la WebClient classe per caricare e scaricare informazioni da un server FTP. Usando uno di questi approcci, quando si specifica una risorsa di rete che usa lo schema FTP ,ad esempio , "ftp://contoso.com"la FtpWebRequest classe consente di interagire a livello di codice con i server FTP.
L'URI può essere relativo o assoluto. Se l'URI è del formato "ftp://contoso.com/%2fpath" (%2f è un escape '/'), l'URI è assoluto e la directory corrente è /path. Se, tuttavia, l'URI è nel formato "ftp://contoso.com/path", prima .NET Framework accede al server FTP (usando il nome utente e la Credentials password impostata dalla proprietà), la directory corrente viene impostata su <UserLoginDirectory>/path.
È necessario disporre di un nome utente e una password validi per il server o il server deve consentire l'accesso anonimo. È possibile specificare le credenziali usate per connettersi al server impostando la Credentials proprietà oppure è possibile includerle nella UserInfo parte dell'URI passato al Create metodo . Se si includono UserInfo informazioni nell'URI, la Credentials proprietà viene impostata su una nuova credenziale di rete con il nome utente e le informazioni sulla password specificati.
Attenzione
A meno che la EnableSsl proprietà non sia true, tutti i dati e i comandi, inclusi il nome utente e le informazioni sulla password, vengono inviati al server in testo non crittografato. Chiunque monitori il traffico di rete può visualizzare le credenziali e usarle per connettersi al server. Se ci si connette a un server FTP che richiede credenziali e supporta SECURE Sockets Layer (SSL), è necessario impostare su EnableSsltrue.
È necessario accedere WebPermission alla risorsa FTP. In caso contrario, viene generata un'eccezione SecurityException .
Specificare il comando FTP da inviare al server impostando la Method proprietà su un valore definito nella WebRequestMethods.Ftp struttura. Per trasmettere dati di testo, modificare la UseBinary proprietà dal valore predefinito (true) a false. Per informazioni dettagliate e restrizioni, vedere Method.
Quando si usa un FtpWebRequest oggetto per caricare un file in un server, è necessario scrivere il contenuto del file nel flusso di richiesta ottenuto chiamando il GetRequestStream metodo o le relative controparti asincrone, i BeginGetRequestStream metodi e EndGetRequestStream . È necessario scrivere nel flusso e chiudere il flusso prima di inviare la richiesta.
Le richieste vengono inviate al server chiamando il GetResponse metodo o le relative controparti asincrone, i BeginGetResponse metodi e EndGetResponse . Al termine dell'operazione richiesta, viene restituito un FtpWebResponse oggetto . L'oggetto FtpWebResponse fornisce lo stato dell'operazione e i dati scaricati dal server.
È possibile impostare un valore di timeout per la lettura o la scrittura nel server usando la ReadWriteTimeout proprietà . Se viene superato il periodo di timeout, il metodo chiamante genera un WebException oggetto con impostato WebExceptionStatus su Timeout.
Quando si scarica un file da un server FTP, se il comando ha esito positivo, il contenuto del file richiesto è disponibile nel flusso dell'oggetto risposta. È possibile accedere a questo flusso chiamando il GetResponseStream metodo . Per altre informazioni, vedere FtpWebResponse.
Se la Proxy proprietà è impostata, direttamente o in un file di configurazione, le comunicazioni con il server FTP vengono effettuate tramite il proxy specificato. Se il proxy specificato è un proxy HTTP, sono supportati solo i DownloadFilecomandi , ListDirectorye ListDirectoryDetails .
Solo il contenuto binario scaricato viene memorizzato nella cache; ovvero il contenuto ricevuto usando il DownloadFile comando con la UseBinary proprietà impostata su true.
Se possibile, più FtpWebRequestconnessioni esistenti vengono riutilizzate.
Per altre informazioni sul protocollo FTP, vedere RFC 959: File Transfer Protocol.
Proprietà
| Nome | Descrizione |
|---|---|
| AuthenticationLevel |
Ottiene o imposta valori che indicano il livello di autenticazione e rappresentazione utilizzati per questa richiesta. (Ereditato da WebRequest) |
| CachePolicy |
Ottiene o imposta i criteri di cache per questa richiesta. (Ereditato da WebRequest) |
| ClientCertificates |
Ottiene o imposta i certificati utilizzati per stabilire una connessione crittografata al server FTP. |
| ConnectionGroupName |
Ottiene o imposta il nome del gruppo di connessioni che contiene il punto di servizio utilizzato per inviare la richiesta corrente. |
| ContentLength |
Ottiene o imposta un valore ignorato dalla FtpWebRequest classe . |
| ContentOffset |
Ottiene o imposta un offset di byte nel file scaricato da questa richiesta. |
| ContentType |
Genera sempre un'eccezione NotSupportedException. |
| CreatorInstance |
Obsoleti.
Quando sottoposto a override in una classe discendente, ottiene l'oggetto factory derivato dalla IWebRequestCreate classe utilizzata per creare l'istanza WebRequest di per effettuare la richiesta all'URI specificato. (Ereditato da WebRequest) |
| Credentials |
Ottiene o imposta le credenziali utilizzate per comunicare con il server FTP. |
| DefaultCachePolicy |
Definisce i criteri di cache predefiniti per tutte le richieste FTP. |
| EnableSsl |
Ottiene o imposta un oggetto Boolean che specifica che deve essere utilizzata una connessione SSL. |
| Headers |
Ottiene un oggetto vuoto WebHeaderCollection . |
| ImpersonationLevel |
Ottiene o imposta il livello di rappresentazione per la richiesta corrente. (Ereditato da WebRequest) |
| KeepAlive |
Ottiene o imposta un Boolean valore che specifica se la connessione del controllo al server FTP viene chiusa al termine della richiesta. |
| Method |
Ottiene o imposta il comando da inviare al server FTP. |
| PreAuthenticate |
Genera sempre un'eccezione NotSupportedException. |
| Proxy |
Ottiene o imposta il proxy utilizzato per comunicare con il server FTP. |
| ReadWriteTimeout |
Ottiene o imposta un timeout durante la lettura o la scrittura in un flusso. |
| RenameTo |
Ottiene o imposta il nuovo nome di un file da rinominare. |
| RequestUri |
Ottiene l'URI richiesto da questa istanza. |
| ServicePoint |
Ottiene l'oggetto ServicePoint utilizzato per connettersi al server FTP. |
| Timeout |
Ottiene o imposta il numero di millisecondi di attesa di una richiesta. |
| UseBinary |
Ottiene o imposta un Boolean valore che specifica il tipo di dati per i trasferimenti di file. |
| UseDefaultCredentials |
Genera sempre un'eccezione NotSupportedException. |
| UsePassive |
Ottiene o imposta il comportamento del processo di trasferimento dati di un'applicazione client. |
Metodi
| Nome | Descrizione |
|---|---|
| Abort() |
Termina un'operazione FTP asincrona. |
| BeginGetRequestStream(AsyncCallback, Object) |
Inizia ad aprire in modo asincrono il flusso di contenuto di una richiesta per la scrittura. |
| BeginGetResponse(AsyncCallback, Object) |
Inizia a inviare una richiesta e a ricevere una risposta da un server FTP in modo asincrono. |
| CreateObjRef(Type) |
Crea un oggetto che contiene tutte le informazioni pertinenti necessarie per generare un proxy utilizzato per comunicare con un oggetto remoto. (Ereditato da MarshalByRefObject) |
| EndGetRequestStream(IAsyncResult) |
Termina un'operazione asincrona in sospeso avviata con BeginGetRequestStream(AsyncCallback, Object). |
| EndGetResponse(IAsyncResult) |
Termina un'operazione asincrona in sospeso avviata con BeginGetResponse(AsyncCallback, Object). |
| Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
| GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
| GetLifetimeService() |
Obsoleti.
Recupera l'oggetto servizio di durata corrente che controlla i criteri di durata per questa istanza. (Ereditato da MarshalByRefObject) |
| GetObjectData(SerializationInfo, StreamingContext) |
Obsoleti.
Popola un SerializationInfo oggetto con i dati necessari per serializzare l'oggetto di destinazione. (Ereditato da WebRequest) |
| GetRequestStream() |
Recupera il flusso utilizzato per caricare i dati in un server FTP. |
| GetRequestStreamAsync() |
Quando sottoposto a override in una classe discendente, restituisce un oggetto Stream per la scrittura di dati nella risorsa Internet come operazione asincrona. (Ereditato da WebRequest) |
| GetResponse() |
Restituisce la risposta del server FTP. |
| GetResponseAsync() |
Quando sottoposto a override in una classe discendente, restituisce una risposta a una richiesta Internet come operazione asincrona. (Ereditato da WebRequest) |
| GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
| InitializeLifetimeService() |
Obsoleti.
Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza. (Ereditato da MarshalByRefObject) |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| MemberwiseClone(Boolean) |
Crea una copia superficiale dell'oggetto corrente MarshalByRefObject . (Ereditato da MarshalByRefObject) |
| ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Implementazioni dell'interfaccia esplicita
| Nome | Descrizione |
|---|---|
| ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
Obsoleti.
Quando sottoposto a override in una classe discendente, popola un'istanza SerializationInfo con i dati necessari per serializzare l'oggetto WebRequest. (Ereditato da WebRequest) |