FtpWebRequest Classe

Definição

Implementa um cliente de protocolo FTP.

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
Herança

Exemplos

O exemplo de código a seguir demonstra a exclusão de um arquivo de um servidor FTP.

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 = dynamic_cast<FtpWebRequest^>(WebRequest::Create( serverUri ));
   request->Method = WebRequestMethods::Ftp::DeleteFile;
   FtpWebResponse^ response = dynamic_cast<FtpWebResponse^>(request->GetResponse());
   Console::WriteLine( "Delete status: {0}", response->StatusDescription );
   response->Close();
   return true;
}
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;
}

O exemplo de código a seguir demonstra o download de um arquivo de um servidor FTP usando a WebClient classe .

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 = gcnew WebClient;

   // This example assumes the FTP site uses anonymous logon.
   request->Credentials = gcnew NetworkCredential( "anonymous","janeDoe@contoso.com" );
   try
   {
      array<Byte>^newFileData = request->DownloadData( serverUri->ToString() );
      String^ fileString = System::Text::Encoding::UTF8->GetString( newFileData );
      Console::WriteLine( fileString );
   }
   catch ( WebException^ e ) 
   {
      Console::WriteLine( e );
   }

   return true;
}
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;
}

O exemplo de código a seguir demonstra o uso de operações assíncronas para carregar um arquivo em um servidor FTP.

#using <System.dll>

using namespace System;
using namespace System::Net;
using namespace System::Threading;
using namespace System::IO;

public ref class FtpState
{
private:
   ManualResetEvent^ wait;
   FtpWebRequest^ request;
   String^ fileName;
   Exception^ operationException;
   String^ status;

public:
   FtpState()
   {
      wait = gcnew ManualResetEvent( false );
   }

   property ManualResetEvent^ OperationComplete 
   {
      ManualResetEvent^ get()
      {
         return wait;
      }

   }

   property FtpWebRequest^ Request 
   {
      FtpWebRequest^ get()
      {
         return request;
      }

      void set( FtpWebRequest^ value )
      {
         request = value;
      }

   }

   property String^ FileName 
   {
      String^ get()
      {
         return fileName;
      }

      void set( String^ value )
      {
         fileName = value;
      }

   }

   property Exception^ OperationException 
   {
      Exception^ get()
      {
         return operationException;
      }

      void set( Exception^ value )
      {
         operationException = value;
      }

   }

   property String^ StatusDescription 
   {
      String^ get()
      {
         return status;
      }

      void set( String^ value )
      {
         status = value;
      }

   }
};

public ref class AsynchronousFtpUpLoader
{
public:

   // 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.
   //
   static void Main()
   {
      array<String^>^args = Environment::GetCommandLineArgs();

      // 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 = gcnew Uri( args[ 1 ] );
      String^ fileName = args[ 2 ];
      FtpState^ state = gcnew FtpState;
      FtpWebRequest ^ request = dynamic_cast<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 = gcnew 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( gcnew 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 != nullptr )
      {
         throw state->OperationException;
      }
      else
      {
         Console::WriteLine( "The operation completed - {0}", state->StatusDescription );
      }
   }

private:
   static void EndGetStreamCallback( IAsyncResult^ ar )
   {
      FtpState^ state = dynamic_cast<FtpState^>(ar->AsyncState);
      Stream^ requestStream = nullptr;

      // 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;
         array<Byte>^buffer = gcnew array<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, bufferLength );
            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( gcnew 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.
   static void EndGetResponseCallback( IAsyncResult^ ar )
   {
      FtpState^ state = dynamic_cast<FtpState^>(ar->AsyncState);
      FtpWebResponse ^ response = nullptr;
      try
      {
         response = dynamic_cast<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();
      }
   }
};

int main()
{
   AsynchronousFtpUpLoader::Main();
}
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();
            }
        }
    }
}

Comentários

Importante

Não recomendamos que você use a FtpWebRequest classe para novo desenvolvimento. Para obter mais informações e alternativas ao FtpWebRequest, consulte WebRequest não deve ser usado no GitHub.

Para obter uma instância do FtpWebRequest, use o Create método . Você também pode usar a WebClient classe para carregar e baixar informações de um servidor FTP. Usando qualquer uma dessas abordagens, quando você especifica um recurso de rede que usa o esquema FTP (por exemplo, ) a "ftp://contoso.com"FtpWebRequest classe fornece a capacidade de interagir programaticamente com servidores FTP.

O URI pode ser relativo ou absoluto. Se o URI for do formulário "ftp://contoso.com/%2fpath" (%2f for um '/' com escape), o URI será absoluto e o diretório atual será /path. Se, no entanto, o URI for do formulário "ftp://contoso.com/path", primeiro o .NET Framework faz logon no servidor FTP (usando o nome de usuário e a Credentials senha definidos pela propriedade), o diretório atual será definido como <UserLoginDirectory>/path.

Você deve ter um nome de usuário e uma senha válidos para o servidor ou o servidor deve permitir logon anônimo. Você pode especificar as credenciais usadas para se conectar ao servidor definindo a Credentials propriedade ou pode incluí-las na UserInfo parte do URI passada para o Create método . Se você incluir UserInfo informações no URI, a Credentials propriedade será definida como uma nova credencial de rede com as informações de nome de usuário e senha especificadas.

Cuidado

A menos que a EnableSsl propriedade seja true, todos os dados e comandos, incluindo suas informações de nome de usuário e senha, são enviados ao servidor em texto não criptografado. Qualquer pessoa que monitore o tráfego de rede pode exibir suas credenciais e usá-las para se conectar ao servidor. Se você estiver se conectando a um servidor FTP que requer credenciais e dá suporte à SSL (Secure Sockets Layer), defina EnableSsl como true.

Você deve ter que WebPermission acessar o recurso FTP; caso contrário, uma SecurityException exceção é gerada.

Especifique o comando FTP a ser enviado ao servidor definindo a Method propriedade como um valor definido na WebRequestMethods.Ftp estrutura. Para transmitir dados de texto, altere a UseBinary propriedade de seu valor padrão (true) para false. Para obter detalhes e restrições, consulte Method.

Ao usar um FtpWebRequest objeto para carregar um arquivo em um servidor, você deve gravar o conteúdo do arquivo no fluxo de solicitação obtido chamando o GetRequestStream método ou seus equivalentes assíncronos, os BeginGetRequestStream métodos e EndGetRequestStream . Você deve gravar no fluxo e fechar o fluxo antes de enviar a solicitação.

As solicitações são enviadas ao servidor chamando o GetResponse método ou seus equivalentes assíncronos, os BeginGetResponse métodos e EndGetResponse . Quando a operação solicitada é concluída, um FtpWebResponse objeto é retornado. O FtpWebResponse objeto fornece o status da operação e todos os dados baixados do servidor.

Você pode definir um valor de tempo limite para leitura ou gravação no servidor usando a ReadWriteTimeout propriedade . Se o período de tempo limite for excedido, o método de chamada lançará um WebException com definido como WebExceptionStatusTimeout.

Ao baixar um arquivo de um servidor FTP, se o comando tiver sido bem-sucedido, o conteúdo do arquivo solicitado estará disponível no fluxo do objeto de resposta. Você pode acessar esse fluxo chamando o GetResponseStream método . Para obter mais informações, consulte FtpWebResponse.

Se a Proxy propriedade estiver definida, diretamente ou em um arquivo de configuração, as comunicações com o servidor FTP serão feitas por meio do proxy especificado. Se o proxy especificado for um proxy HTTP, somente os DownloadFilecomandos , ListDirectorye ListDirectoryDetails serão compatíveis.

Somente o conteúdo binário baixado é armazenado em cache; ou seja, o conteúdo recebido usando o DownloadFile comando com a UseBinary propriedade definida como true.

Vários FtpWebRequests reutilizam conexões existentes, se possível.

Para obter mais informações sobre o protocolo FTP, consulte RFC 959: File Transfer Protocol.

Propriedades

AuthenticationLevel

Obtém ou define valores que indicam o nível de autenticação e representação usada para esta solicitação.

(Herdado de WebRequest)
CachePolicy

Obtém ou define a política de cache para essa solicitação.

(Herdado de WebRequest)
ClientCertificates

Obtém ou define os certificados usados para estabelecer uma conexão criptografada ao servidor FTP.

ConnectionGroupName

Obtém ou define o nome do grupo de conexão que contém o ponto de serviço usado para enviar a solicitação atual.

ContentLength

Obtém ou define um valor que é ignorado pela classe FtpWebRequest.

ContentOffset

Obtém ou define um deslocamento de bytes no arquivo que está sendo baixado por essa solicitação.

ContentType

Sempre gera um NotSupportedException.

CreatorInstance
Obsoleto.

Quando substituído em uma classe descendente, obtém o objeto de fábrica derivado da classe IWebRequestCreate usada para criar o WebRequest instanciado para criar a solicitação para o URI especificado.

(Herdado de WebRequest)
Credentials

Obtém ou define as credenciais usadas para se comunicar com o servidor FTP.

DefaultCachePolicy

Define a política de cache padrão para todas as solicitações FTP.

EnableSsl

Obtém ou define um Boolean que especifica se uma conexão SSL deve ser usada.

Headers

Obtém um objeto WebHeaderCollection vazio.

ImpersonationLevel

Obtém ou define o nível de representação para a solicitação atual.

(Herdado de WebRequest)
KeepAlive

Obtém ou define um valor Boolean que especifica se a conexão de controle com o servidor FTP é fechada depois que a solicitação é concluída.

Method

Obtém ou define o comando a ser enviado ao servidor FTP.

PreAuthenticate

Sempre gera um NotSupportedException.

Proxy

Obtém ou define o proxy usado para se comunicar com o servidor FTP.

ReadWriteTimeout

Obtém ou define um tempo limite durante a leitura ou gravação em um fluxo.

RenameTo

Obtém ou define o novo nome de um arquivo que está sendo renomeado.

RequestUri

Obtém o URI solicitado por essa instância.

ServicePoint

Obtém o objeto ServicePoint usado para conexão ao servidor FTP.

Timeout

Obtém ou define o número de milissegundos de espera de uma solicitação.

UseBinary

Obtém ou define um valor de Boolean que especifica o tipo de dados para as transferências de arquivos.

UseDefaultCredentials

Sempre gera um NotSupportedException.

UsePassive

Obtém ou define o comportamento do processo de transferência de dados de um aplicativo cliente.

Métodos

Abort()

Encerra uma operação FTP assíncrona.

BeginGetRequestStream(AsyncCallback, Object)

Começa assincronamente abrindo o fluxo de conteúdo de uma solicitação para gravação.

BeginGetResponse(AsyncCallback, Object)

Começa a enviar uma solicitação e receber uma resposta de um servidor FTP de maneira assíncrona.

CreateObjRef(Type)

Cria um objeto que contém todas as informações relevantes necessárias para gerar um proxy usado para se comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
EndGetRequestStream(IAsyncResult)

Encerra uma operação assíncrona pendente iniciada com BeginGetRequestStream(AsyncCallback, Object).

EndGetResponse(IAsyncResult)

Encerra uma operação assíncrona pendente iniciada com BeginGetResponse(AsyncCallback, Object).

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetLifetimeService()
Obsoleto.

Recupera o objeto de serviço de tempo de vida atual que controla a política de ciclo de vida para esta instância.

(Herdado de MarshalByRefObject)
GetObjectData(SerializationInfo, StreamingContext)
Obsoleto.

Popula um SerializationInfo com os dados necessários para serializar o objeto de destino.

(Herdado de WebRequest)
GetRequestStream()

Recupera o fluxo usado para carregar dados para um servidor FTP.

GetRequestStreamAsync()

Quando substituído em uma classe descendente, retorna um Stream para gravar dados no recurso da Internet como uma operação assíncrona.

(Herdado de WebRequest)
GetResponse()

Retorna a resposta do servidor FTP.

GetResponseAsync()

Quando é substituído em uma classe descendente, retorna uma resposta a uma solicitação à Internet como uma operação assíncrona.

(Herdado de WebRequest)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InitializeLifetimeService()
Obsoleto.

Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida para essa instância.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto MarshalByRefObject atual.

(Herdado de MarshalByRefObject)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

ISerializable.GetObjectData(SerializationInfo, StreamingContext)
Obsoleto.

Quando substituído em uma classe descendente, popula uma instância SerializationInfo com os dados necessários para serializar o WebRequest.

(Herdado de WebRequest)

Aplica-se a

Confira também