Бөлісу құралы:


FtpWebRequest Класс

Определение

Реализует клиент ПРОТОКОЛА передачи файлов (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
Наследование

Примеры

В следующем примере кода показано удаление файла с 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;
}

В следующем примере кода показано скачивание файла с FTP-сервера с помощью WebClient класса.

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

В следующем примере кода показано использование асинхронных операций для отправки файла на 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();
            }
        }
    }
}

Комментарии

Это важно

Мы не рекомендуем использовать FtpWebRequest класс для новой разработки. Дополнительные сведения и альтернативные варианты FtpWebRequestсм. в разделе WebRequest не следует использовать на сайте GitHub.

Чтобы получить экземпляр FtpWebRequest, используйте Create метод. Можно также использовать WebClient класс для отправки и скачивания сведений с FTP-сервера. При использовании любого из этих подходов при указании сетевого ресурса, использующего схему FTP (например, "ftp://contoso.com"), FtpWebRequest класс предоставляет возможность программного взаимодействия с FTP-серверами.

Универсальный код ресурса (URI) может быть относительным или абсолютным. Если URI имеет форму "ftp://contoso.com/%2fpath" (%2f является экранируемым "/"), URI является абсолютным, а текущий каталог — /pathабсолютным. Однако если универсальный код ресурса (URI) имеет форму "ftp://contoso.com/path", сначала платформа .NET Framework регистрируется на FTP-сервере (используя имя пользователя и пароль, заданные Credentials свойством), то текущий каталог имеет значение <UserLoginDirectory>/path.

У вас должно быть допустимое имя пользователя и пароль для сервера, или сервер должен разрешить анонимный вход. Вы можете указать учетные данные, используемые для подключения к серверу, задав Credentials свойство или включив их в UserInfo часть URI, переданной методу Create . Если вы включаете UserInfo сведения в URI, Credentials свойство устанавливается на новые сетевые учетные данные с указанным именем пользователя и сведениями о пароле.

Предостережение

Если EnableSsl свойство не имеет trueзначения, все данные и команды, включая имя пользователя и сведения о пароле, отправляются на сервер в виде ясного текста. Любой пользователь, отслеживая сетевой трафик, может просматривать свои учетные данные и использовать их для подключения к серверу. Если вы подключаетесь к FTP-серверу, которому требуются учетные данные и поддерживается протокол SSL, необходимо задать значение EnableSsltrue.

WebPermission Необходимо получить доступ к ресурсу FTP. В противном случае SecurityException создается исключение.

Укажите команду FTP для отправки на сервер, задав Method свойству значение, определенное WebRequestMethods.Ftp в структуре. Чтобы передать текстовые данные, измените UseBinary свойство со значения по умолчанию (true) на false. Дополнительные сведения и ограничения см. в разделе Method.

При использовании FtpWebRequest объекта для отправки файла на сервер необходимо записать содержимое файла в поток запросов, полученный путем вызова GetRequestStream метода или его асинхронных коллег, BeginGetRequestStream методов и EndGetRequestStream методов. Перед отправкой запроса необходимо записать в поток и закрыть поток.

Запросы отправляются на сервер путем вызова GetResponse метода или его асинхронных коллег, BeginGetResponse методов и EndGetResponse методов. После завершения FtpWebResponse запрошенной операции возвращается объект. Объект FtpWebResponse предоставляет состояние операции и все данные, скачанные с сервера.

Значение времени ожидания можно задать для чтения или записи на сервер с помощью ReadWriteTimeout свойства. Если превышен период времени ожидания, вызывающий метод создает исключение с WebExceptionStatus заданным WebException значениемTimeout.

При скачивании файла с FTP-сервера, если команда была успешной, содержимое запрошенного файла доступно в потоке объекта ответа. Вы можете получить доступ к этому потоку GetResponseStream , вызвав метод. Дополнительные сведения см. в разделе FtpWebResponse.

Proxy Если свойство задано напрямую или в файле конфигурации, обмен данными с FTP-сервером осуществляется через указанный прокси-сервер. Если указанный прокси является HTTP-прокси, поддерживаются только команды DownloadFile, ListDirectory и ListDirectoryDetails.

Кэшируется только скачаемое двоичное содержимое; То есть содержимое, полученное DownloadFile с помощью команды с заданным trueсвойствомUseBinary.

Если это возможно, несколько FtpWebRequestраз используют существующие подключения.

Дополнительные сведения о протоколе FTP см. в статье RFC 959: протокол передачи файлов.

Свойства

Имя Описание
AuthenticationLevel

Возвращает или задает значения, указывающие уровень проверки подлинности и олицетворения, используемого для этого запроса.

(Унаследовано от WebRequest)
CachePolicy

Возвращает или задает политику кэша для этого запроса.

(Унаследовано от WebRequest)
ClientCertificates

Возвращает или задает сертификаты, используемые для установления зашифрованного подключения к FTP-серверу.

ConnectionGroupName

Возвращает или задает имя группы подключений, содержащей точку обслуживания, используемую для отправки текущего запроса.

ContentLength

Возвращает или задает значение, игнорируемое классом FtpWebRequest .

ContentOffset

Возвращает или задает смещение байтов в файл, скачанный этим запросом.

ContentType

Всегда бросает NotSupportedException.

CreatorInstance
Устаревшие..

При переопределении в классе-потомке получает объект фабрики, производный от IWebRequestCreate класса, используемого для создания WebRequest экземпляра запроса к указанному URI.

(Унаследовано от WebRequest)
Credentials

Возвращает или задает учетные данные, используемые для взаимодействия с FTP-сервером.

DefaultCachePolicy

Определяет политику кэша по умолчанию для всех FTP-запросов.

EnableSsl

Возвращает или задает значение Boolean , указывающее, что необходимо использовать SSL-подключение.

Headers

Возвращает пустой WebHeaderCollection объект.

ImpersonationLevel

Возвращает или задает уровень олицетворения для текущего запроса.

(Унаследовано от WebRequest)
KeepAlive

Возвращает или задает Boolean значение, указывающее, закрывается ли подключение элемента управления к FTP-серверу после завершения запроса.

Method

Возвращает или задает команду для отправки на FTP-сервер.

PreAuthenticate

Всегда бросает NotSupportedException.

Proxy

Возвращает или задает прокси-сервер, используемый для взаимодействия с FTP-сервером.

ReadWriteTimeout

Возвращает или задает время ожидания при чтении или записи в поток.

RenameTo

Возвращает или задает новое имя переименованного файла.

RequestUri

Возвращает URI, запрошенный этим экземпляром.

ServicePoint

Возвращает объект, используемый ServicePoint для подключения к FTP-серверу.

Timeout

Возвращает или задает количество миллисекунда, ожидающее запроса.

UseBinary

Возвращает или задает Boolean значение, указывающее тип данных для передачи файлов.

UseDefaultCredentials

Всегда бросает NotSupportedException.

UsePassive

Возвращает или задает поведение процесса передачи данных клиентского приложения.

Методы

Имя Описание
Abort()

Завершает асинхронную операцию FTP.

BeginGetRequestStream(AsyncCallback, Object)

Начинает асинхронно открытие потока содержимого запроса для записи.

BeginGetResponse(AsyncCallback, Object)

Начинает отправлять запрос и получать ответ от FTP-сервера асинхронно.

CreateObjRef(Type)

Создает объект, содержащий все соответствующие сведения, необходимые для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

(Унаследовано от MarshalByRefObject)
EndGetRequestStream(IAsyncResult)

Завершает ожидающие асинхронные операции, запущенные с BeginGetRequestStream(AsyncCallback, Object).

EndGetResponse(IAsyncResult)

Завершает ожидающие асинхронные операции, запущенные с BeginGetResponse(AsyncCallback, Object).

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetLifetimeService()
Устаревшие..

Извлекает текущий объект службы времени существования, который управляет политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
GetObjectData(SerializationInfo, StreamingContext)
Устаревшие..

Заполняет SerializationInfo данные, необходимые для сериализации целевого объекта.

(Унаследовано от WebRequest)
GetRequestStream()

Извлекает поток, используемый для отправки данных на FTP-сервер.

GetRequestStreamAsync()

При переопределении в классе-потомке возвращает Stream данные для записи данных в интернет-ресурс в качестве асинхронной операции.

(Унаследовано от WebRequest)
GetResponse()

Возвращает ответ FTP-сервера.

GetResponseAsync()

При переопределении в классе-потомке возвращает ответ на интернет-запрос в качестве асинхронной операции.

(Унаследовано от WebRequest)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
InitializeLifetimeService()
Устаревшие..

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неглубокую копию текущего MarshalByRefObject объекта.

(Унаследовано от MarshalByRefObject)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

Имя Описание
ISerializable.GetObjectData(SerializationInfo, StreamingContext)
Устаревшие..

При переопределении в классе-потомке заполняет SerializationInfo экземпляр данными, необходимыми для сериализации WebRequest.

(Унаследовано от WebRequest)

Применяется к

См. также раздел