Sdílet prostřednictvím


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.

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.

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;
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 FtpWebRequestsadě WebRequest by se neměly používat na GitHubu.

Chcete-li získat instanci FtpWebRequest, použijte metodu Create . Třídu můžete také použít WebClient k nahrání a stažení informací ze serveru FTP. Pomocí některého z těchto přístupů zadáte síťový prostředek, který používá schéma FTP (například "ftp://contoso.com"), FtpWebRequest třída umožňuje programově pracovat se servery FTP.

Identifikátor URI může být relativní nebo absolutní. Pokud je identifikátor URI formuláře "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 formuláře "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í. Přihlašovací údaje používané 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 metodě Create . 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í

Pokud tato EnableSsl vlastnost není true, budou se na server odesílat všechna data a příkazy, včetně vašeho uživatelského jména a hesla, 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 k 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 .true

Musíte mít WebPermission přístup k prostředku FTP. SecurityException V opačném případě se vyvolá výjimka.

Zadáním příkazu FTP odešlete na server nastavením Method vlastnosti na hodnotu definovanou ve struktuře WebRequestMethods.Ftp . Chcete-li 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í FtpWebRequest objektu k nahrání souboru na server musíte zapsat obsah souboru do datového proudu požadavku získaného voláním GetRequestStream metody nebo jeho asynchronních protějšků, BeginGetRequestStream a EndGetRequestStream metod. Před odesláním požadavku musíte datový proud zapsat do datového proudu a zavřít ho.

Požadavky se odesílají na server voláním GetResponse metody nebo jejích asynchronních protějšků, metod BeginGetResponse a EndGetResponse metod. 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, vyvolá volající metoda hodnotu s WebExceptionStatus nastavenou WebException hodnotou Timeout.

Při stahování souboru ze serveru FTP, pokud byl příkaz úspěšný, je obsah požadovaného souboru k dispozici ve streamu objektu odpovědi. K tomuto datovému GetResponseStream proudu se dostanete voláním metody. Další informace najdete na webu FtpWebResponse.

Proxy Pokud je vlastnost nastavena přímo nebo v konfiguračním souboru, komunikace se serverem FTP se provádí prostřednictvím zadaného proxy serveru. Pokud je zadaným proxy serverem HTTP server, jsou podporovány pouze příkazy DownloadFile, ListDirectory a ListDirectoryDetails.

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

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

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

Vlastnosti

Name Description
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 bajtu do souboru staženého tímto požadavkem.

ContentType

Vždy vyvolá .NotSupportedException

CreatorInstance
Zastaralé.

Při přepsání v potomk třídy získá objekt továrny odvozený z IWebRequestCreate třídy použité k vytvoření WebRequest instance pro vytvoření 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 se má 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 je řídicí připojení k serveru FTP uzavřeno po dokončení požadavku.

Method

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

PreAuthenticate

Vždy vyvolá .NotSupportedException

Proxy

Získá nebo nastaví proxy server 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 souboru, který se přejmenuje.

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 vyvolá .NotSupportedException

UsePassive

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

Metody

Name Description
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 serveru sloužícího ke komunikaci se vzdáleným objektem.

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

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

EndGetResponse(IAsyncResult)

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

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

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

Slouží jako výchozí funkce hash.

(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 data potřebná 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 potomk třídy vrátí Stream pro zápis dat do internetového prostředku jako asynchronní operace.

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

Vrátí odpověď serveru FTP.

GetResponseAsync()

Při přepsání v potomk třídy vrátí odpověď na internetový požadavek jako asynchronní operace.

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

Získá Type aktuální instance.

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

Získá objekt služby životnosti pro řízení zásad životnosti pro tuto instanci.

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

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

(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í

Name Description
ISerializable.GetObjectData(SerializationInfo, StreamingContext)
Zastaralé.

Při přepsání v potomk třídy naplní SerializationInfo instanci dat potřebnými k serializaci WebRequest.

(Zděděno od WebRequest)

Platí pro

Viz také