FtpWebRequest Třída

Definice

Implementuje klienta 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
Dědičnost

Příklady

Následující příklad kódu ukazuje odstranění souboru ze serveru 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;
}

Následující příklad kódu ukazuje stažení souboru ze serveru FTP pomocí WebClient třídy .

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

Následující příklad kódu ukazuje použití asynchronních operací k nahrání souboru na server 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();
            }
        }
    }
}

Poznámky

Důležité

Nedoporučujeme používat FtpWebRequest třídu pro nový vývoj. Další informace a alternativy k nástroji FtpWebRequestnajdete v tématu WebRequest by se nemělo používat na GitHubu.

Pokud chcete získat instanci FtpWebRequestnástroje , použijte metodu Create . Třídu můžete také použít WebClient k nahrání a stahování informací ze serveru FTP. Při použití některého z těchto přístupů, když zadáte síťový prostředek, "ftp://contoso.com"který používá schéma FTP (například ), FtpWebRequest třída poskytuje možnost programově komunikovat se servery FTP.

Identifikátor URI může být relativní nebo absolutní. Pokud je identifikátor URI ve tvaru "ftp://contoso.com/%2fpath" (%2f je řídicí znak /), pak je identifikátor URI absolutní a aktuální adresář je /path. Pokud je však identifikátor URI ve formátu "ftp://contoso.com/path", nejprve se rozhraní .NET Framework přihlásí k serveru FTP (pomocí uživatelského jména a hesla nastaveného Credentials vlastností), pak je aktuální adresář nastaven na <UserLoginDirectory>/path.

Musíte mít platné uživatelské jméno a heslo pro server nebo server musí povolit anonymní přihlášení. Můžete zadat přihlašovací údaje použité pro připojení k serveru nastavením Credentials vlastnosti nebo je můžete zahrnout do UserInfo části identifikátoru URI předaného Create metodě. Pokud do identifikátoru URI zahrnete UserInfo informace, Credentials vlastnost se nastaví na nové přihlašovací údaje sítě se zadanými informacemi o uživatelském jménu a hesle.

Upozornění

EnableSsl Pokud není truevlastnost , odesílají se všechna data a příkazy, včetně informací o vašem uživatelském jménu a hesle, na server ve formátu prostého textu. Každý, kdo monitoruje síťový provoz, může zobrazit vaše přihlašovací údaje a použít je pro připojení k serveru. Pokud se připojujete k serveru FTP, který vyžaduje přihlašovací údaje a podporuje protokol SSL (Secure Sockets Layer), měli byste nastavit EnableSsl hodnotu true.

Musíte mít WebPermission přístup k prostředku FTP, jinak dojde k výjimce SecurityException .

Zadejte příkaz FTP, který se má odeslat na server, nastavením Method vlastnosti na hodnotu definovanou ve struktuře WebRequestMethods.Ftp . Pokud chcete přenést textová data, změňte UseBinary vlastnost z výchozí hodnoty (true) na false. Podrobnosti a omezení najdete v tématu Method.

Při použití objektu FtpWebRequest k nahrání souboru na server je nutné zapsat obsah souboru do streamu požadavku získaného GetRequestStream voláním metody nebo jejích asynchronních protějšků, BeginGetRequestStream metod a EndGetRequestStream . Před odesláním požadavku musíte do datového proudu zapsat a datový proud zavřít.

Požadavky se na server odesílají voláním GetResponse metody nebo jejích asynchronních protějšků, BeginGetResponse metod a EndGetResponse . Po dokončení FtpWebResponse požadované operace se vrátí objekt. Objekt FtpWebResponse poskytuje stav operace a všechna data stažená ze serveru.

Pomocí vlastnosti můžete nastavit hodnotu časového limitu ReadWriteTimeout pro čtení nebo zápis na server. Při překročení časového limitu vyvolá metoda volání hodnotu s WebExceptionStatus nastavenou WebException na Timeout.

Při stahování souboru ze serveru FTP je v případě úspěšného příkazu obsah požadovaného souboru k dispozici v datovém proudu objektu odpovědi. K tomuto streamu se dostanete voláním GetResponseStream metody . Další informace naleznete v tématu FtpWebResponse.

Proxy Pokud je vlastnost nastavená, buď přímo, nebo v konfiguračním souboru, komunikace se serverem FTP probíhá prostřednictvím zadaného proxy serveru. Pokud je zadaný proxy server proxy http, podporují se pouze DownloadFilepříkazy , ListDirectorya ListDirectoryDetails .

Do mezipaměti je uložen pouze stažený binární obsah; to znamená, že obsah přijatý pomocí DownloadFile příkazu s vlastností nastavenou UseBinary na true.

Pokud je to možné, opakovaně používá více FtpWebRequestexistujících připojení.

Další informace o protokolu FTP najdete v dokumentu RFC 959: File Transfer Protocol.

Vlastnosti

AuthenticationLevel

Získá nebo nastaví hodnoty označující úroveň ověřování a zosobnění použité pro tento požadavek.

(Zděděno od WebRequest)
CachePolicy

Získá nebo nastaví zásady mezipaměti pro tento požadavek.

(Zděděno od WebRequest)
ClientCertificates

Získá nebo nastaví certifikáty používané k navázání šifrovaného připojení k serveru FTP.

ConnectionGroupName

Získá nebo nastaví název skupiny připojení, která obsahuje bod služby použitý k odeslání aktuálního požadavku.

ContentLength

Získá nebo nastaví hodnotu, která je ignorována FtpWebRequest třídou.

ContentOffset

Získá nebo nastaví posun bajtů do souboru staženého tímto požadavkem.

ContentType

Vždy vyhodí NotSupportedException.

CreatorInstance
Zastaralé.

Při přepsání v následné třídě získá objekt factory odvozený z IWebRequestCreate třídy použité k vytvoření WebRequest instance pro provedení požadavku na zadaný identifikátor URI.

(Zděděno od WebRequest)
Credentials

Získá nebo nastaví přihlašovací údaje používané ke komunikaci se serverem FTP.

DefaultCachePolicy

Definuje výchozí zásady mezipaměti pro všechny požadavky FTP.

EnableSsl

Získá nebo nastaví, Boolean který určuje, že by se mělo použít připojení SSL.

Headers

Získá prázdný WebHeaderCollection objekt.

ImpersonationLevel

Získá nebo nastaví úroveň zosobnění aktuálního požadavku.

(Zděděno od WebRequest)
KeepAlive

Získá nebo nastaví Boolean hodnotu, která určuje, zda řízení připojení k serveru FTP je uzavřen po dokončení požadavku.

Method

Získá nebo nastaví příkaz odeslat na server FTP.

PreAuthenticate

Vždy vyhodí NotSupportedException.

Proxy

Získá nebo nastaví proxy použitý ke komunikaci se serverem FTP.

ReadWriteTimeout

Získá nebo nastaví časový limit při čtení nebo zápisu do datového proudu.

RenameTo

Získá nebo nastaví nový název přejmenovávaného souboru.

RequestUri

Získá identifikátor URI požadovaný touto instancí.

ServicePoint

ServicePoint Získá objekt použitý pro připojení k serveru FTP.

Timeout

Získá nebo nastaví počet milisekund čekání na požadavek.

UseBinary

Získá nebo nastaví Boolean hodnotu, která určuje datový typ pro přenosy souborů.

UseDefaultCredentials

Vždy vyhodí NotSupportedException.

UsePassive

Získá nebo nastaví chování procesu přenosu dat klientské aplikace.

Metody

Abort()

Ukončí asynchronní operaci FTP.

BeginGetRequestStream(AsyncCallback, Object)

Začne asynchronně otevírat stream obsahu požadavku pro zápis.

BeginGetResponse(AsyncCallback, Object)

Začne odesílat požadavek a přijímat odpověď ze serveru FTP asynchronně.

CreateObjRef(Type)

Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy používaného ke komunikaci se vzdáleným objektem.

(Zděděno od MarshalByRefObject)
EndGetRequestStream(IAsyncResult)

Ukončí čekající asynchronní operaci spuštěnou pomocí BeginGetRequestStream(AsyncCallback, Object)příkazu .

EndGetResponse(IAsyncResult)

Ukončí čekající asynchronní operaci spuštěnou pomocí BeginGetResponse(AsyncCallback, Object)příkazu .

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetLifetimeService()
Zastaralé.

Načte objekt služby aktuální životnosti, který řídí zásady životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
GetObjectData(SerializationInfo, StreamingContext)
Zastaralé.

Naplní SerializationInfo objekt daty potřebnými k serializaci cílového objektu.

(Zděděno od WebRequest)
GetRequestStream()

Načte datový proud použitý k nahrání dat na server FTP.

GetRequestStreamAsync()

Při přepsání v odvozené třídě vrátí hodnotu Stream pro zápis dat do internetového prostředku jako asynchronní operaci.

(Zděděno od WebRequest)
GetResponse()

Vrátí odpověď serveru FTP.

GetResponseAsync()

Při přepsání v odvozené třídě vrátí odpověď na internetový požadavek jako asynchronní operaci.

(Zděděno od WebRequest)
GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
InitializeLifetimeService()
Zastaralé.

Získá objekt služby životnosti, který řídí zásady životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
MemberwiseClone(Boolean)

Vytvoří mělkou kopii aktuálního MarshalByRefObject objektu.

(Zděděno od MarshalByRefObject)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Explicitní implementace rozhraní

ISerializable.GetObjectData(SerializationInfo, StreamingContext)
Zastaralé.

Při přepsání v potomkované třídě naplní SerializationInfo instanci dat potřebnými k serializaci WebRequest.

(Zděděno od WebRequest)

Platí pro

Viz také