Sdílet prostřednictvím


FtpWebRequest Třída

Definice

Implementuje klienta protokolu 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 FtpWebRequestnajdete v tématu WebRequest by se nemělo používat na GitHubu.

K získání instance FtpWebRequestpoužijte metodu Create . Můžete také použít třídu k WebClient nahrání a stažení informací ze serveru FTP. Při použití některého z těchto přístupů při zadání síťového prostředku, "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 /), 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>/pathhodnotu .

Musíte mít platné uživatelské jméno a heslo pro server nebo server musí povolit anonymní přihlášení. Přihlašovací údaje použité pro připojení k serveru můžete zadat 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é síťové přihlašovací údaje se zadaným uživatelským jménem a heslem.

Upozornění

EnableSsl Pokud není truevlastnost , všechna data a příkazy, včetně informací o vašem uživatelském jménu a hesle, se odesílají na server jako prostý text. 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 na 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 musíte 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 streamu zapisovat 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. Pokud dojde k překročení časového limitu, volání metody vyvolá WebException výjimku s nastaveným WebExceptionStatus na Timeout.

Pokud byl příkaz při stahování souboru ze serveru FTP úspěšný, je obsah požadovaného souboru k dispozici ve streamu objektu odpovědi. Přístup k tomuto datovému proudu získáte voláním GetResponseStream metody . Další informace naleznete v tématu FtpWebResponse.

Proxy Pokud je vlastnost nastavena, 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ým proxy serverem proxy http, podporují se DownloadFilepouze příkazy , ListDirectorya ListDirectoryDetails .

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

Pokud je to možné, používají stávající připojení více FtpWebRequestuživatelů.

Další informace o protokolu FTP najdete v tématu 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 odvozené třídě získá objekt továrny 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í pro aktuální požadavek.

(Zděděno od WebRequest)
KeepAlive

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

Method

Získá nebo nastaví příkaz k odeslání na server FTP.

PreAuthenticate

Vždy vyhodí NotSupportedException.

Proxy

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

ReadWriteTimeout

Získá nebo nastaví časový limit při čtení z datového proudu 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 asynchronně odesílat požadavek a přijímat odpověď ze serveru FTP.

CreateObjRef(Type)

Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy sloužící 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).

EndGetResponse(IAsyncResult)

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

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 aktuální životnost objektu služby, 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 požadavek internetu jako asynchronní operaci.

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

Type Získá z aktuální instance.

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

Získá životnost objektu služby, 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 odvozené třídě, naplní SerializationInfo instanci dat potřebnými k serializaci WebRequest.

(Zděděno od WebRequest)

Platí pro

Viz také