Экспорт (0) Печать
Развернуть все
Данная статья переведена автоматически. Наведите указатель мыши на предложения статьи, чтобы просмотреть исходный текст. Дополнительные сведения.
Перевод
Текст оригинала

FtpWebRequest - класс

Реализует FTP-клиент.

Пространство имен:  System.Net
Сборка:  System (в System.dll)

public sealed class FtpWebRequest : WebRequest

Тип FtpWebRequest предоставляет следующие члены.

  ИмяОписание
Открытое свойствоAuthenticationLevelВозвращает или задает значения, указывающие уровень проверки подлинности и олицетворения, используемые для этого запроса. (Унаследовано от WebRequest.)
Открытое свойствоCachePolicyВозвращает или задает политику кэширования для этого запроса. (Унаследовано от WebRequest.)
Открытое свойствоClientCertificatesПолучает или задает сертификаты, используемые для установки и шифрования подключения к FTP-серверу.
Открытое свойствоConnectionGroupNameВозвращает или задает имя группы подключения, которая содержит точка обслуживания, используемую для отправки текущего запроса. (Переопределяет WebRequest.ConnectionGroupName.)
Открытое свойствоContentLengthИнфраструктура. Возвращает или задает значение, не учитываемое классом FtpWebRequest. (Переопределяет WebRequest.ContentLength.)
Открытое свойствоContentOffsetВозвращает или задает смещение в байтах для файла, загружаемого через этот запрос.
Открытое свойствоContentTypeИнфраструктура. Всегда создает исключение NotSupportedException. (Переопределяет WebRequest.ContentType.)
Открытое свойствоCreatorInstance Устарело. При переопределении в производном классе получает объект фабрики, производный от класса IWebRequestCreate, который служит для создания объекта WebRequest для создания запроса по указанному универсальному коду ресурса (URI). (Унаследовано от WebRequest.)
Открытое свойствоCredentialsВозвращает или задает учетные данные, используемые для связи с FTP-сервером. (Переопределяет WebRequest.Credentials.)
Открытое свойствоСтатический членDefaultCachePolicyОпределяет политику кэширования по умолчанию для всех FTP-запросов.
Открытое свойствоEnableSslВозвращает или задает объект Boolean, который указывает, что необходимо использовать SSL-подключение.
Открытое свойствоHeadersИнфраструктура. Возвращает пустой объект WebHeaderCollection. (Переопределяет WebRequest.Headers.)
Открытое свойствоImpersonationLevelВозвращает или задает уровень олицетворения для текущего запроса. (Унаследовано от WebRequest.)
Открытое свойствоKeepAliveВозвращает или задает значение Boolean, которое указывает, следует ли закрывать управляющее подключение к FTP-серверу после завершения запроса.
Открытое свойствоMethodВозвращает или задает команду, которая будет отправлена на FTP-сервер. (Переопределяет WebRequest.Method.)
Открытое свойствоPreAuthenticateИнфраструктура. Всегда создает исключение NotSupportedException. (Переопределяет WebRequest.PreAuthenticate.)
Открытое свойствоProxyВозвращает или задает прокси-сервер, используемый для связи с FTP-сервером. (Переопределяет WebRequest.Proxy.)
Открытое свойствоReadWriteTimeoutВозвращает или задает время ожидания при записи в поток или при чтении из него.
Открытое свойствоRenameToВозвращает или задает новое имя переименовываемого файла.
Открытое свойствоRequestUriВозвращает URI, запрошенный этим экземпляром. (Переопределяет WebRequest.RequestUri.)
Открытое свойствоServicePointВозвращает объект ServicePoint, используемый для подключения к FTP-серверу.
Открытое свойствоTimeoutВозвращает или задает количество миллисекунд для ожидания запроса. (Переопределяет WebRequest.Timeout.)
Открытое свойствоUseBinaryВозвращает или задает значение Boolean, которое указывает тип данных для передачи файлов.
Открытое свойствоUseDefaultCredentialsИнфраструктура. Всегда создает исключение NotSupportedException. (Переопределяет WebRequest.UseDefaultCredentials.)
Открытое свойствоUsePassiveВозвращает или задает поведение процесса передачи данных в клиентском приложении.
В начало страницы

  ИмяОписание
Открытый методAbortПрерывает асинхронную FTP-операцию. (Переопределяет WebRequest.Abort().)
Открытый методBeginGetRequestStreamНачинает асинхронное открытие потока с содержимым запроса для записи. (Переопределяет WebRequest.BeginGetRequestStream(AsyncCallback, Object).)
Открытый методBeginGetResponseНачинает асинхронно отправлять запрос и получать ответ с FTP-сервера. (Переопределяет WebRequest.BeginGetResponse(AsyncCallback, Object).)
Открытый методCreateObjRefСоздает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject.)
Открытый методEndGetRequestStreamЗавершает асинхронную операцию в очереди, начинавшуюся с BeginGetRequestStream. (Переопределяет WebRequest.EndGetRequestStream(IAsyncResult).)
Открытый методEndGetResponseЗавершает асинхронную операцию в очереди, начинавшуюся с BeginGetResponse. (Переопределяет WebRequest.EndGetResponse(IAsyncResult).)
Открытый методEquals(Object)Определяет, равен ли заданный объект текущему объекту. (Унаследовано от Object.)
Открытый методGetHashCodeСлужит хэш-функцией по умолчанию. (Унаследовано от Object.)
Открытый методGetLifetimeServiceИзвлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject.)
Открытый методGetRequestStreamПолучает поток, используемый для выгрузки данных на FTP-сервер. (Переопределяет WebRequest.GetRequestStream().)
Открытый методGetRequestStreamAsyncПри переопределении во вложенном классе возвращает Stream для записи данных в интернет-ресурс в виде асинхронной операции. (Унаследовано от WebRequest.)
Открытый методGetResponseВозвращает ответ FTP-сервера. (Переопределяет WebRequest.GetResponse().)
Открытый методGetResponseAsyncПри переопределении во вложенном классе возвращает ответ на интернет-запрос в виде асинхронной операции. (Унаследовано от WebRequest.)
Открытый методGetTypeВозвращает объект Type для текущего экземпляра. (Унаследовано от Object.)
Открытый методInitializeLifetimeServiceВозвращает объект обслуживания во время существования для управления политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject.)
Открытый методToStringВозвращает строку, представляющую текущий объект. (Унаследовано от Object.)
В начало страницы

  ИмяОписание
Явная реализация интерфейсаЗакрытый методISerializable.GetObjectDataИнфраструктура. При переопределении во вложенном классе заполняет экземпляр SerializationInfo данными, которые необходимы для сериализации WebRequest. (Унаследовано от WebRequest.)
В начало страницы

Чтобы получить экземпляр 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, необходимо задать для свойства EnableSsl значение true.

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

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

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

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

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

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

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

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

Несколько запросов FtpWebRequests по возможности будут повторно использовать существующие подключения.

Дополнительные сведения о протоколе FTP см. в документе RFC 959 "File Transfer Protocol", доступном на веб-узле http://www.rfc-editor.org/.

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


.NET Framework

Поддерживается в версиях: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework (клиентский профиль)

Поддерживается в версиях: 4, 3.5 с пакетом обновления 1 (SP1)

  • WebPermission 

    для доступа к ресурсу, на который ссылается этот запрос. Связанное перечисление: Connect.

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista с пакетом обновления 2 (SP2), Windows Server 2008 (роль основных серверных компонентов не поддерживается), Windows Server 2008 R2 (роль основных серверных компонентов поддерживается в пакете обновления 1 (SP1) или выше; системы на базе Itanium не поддерживаются)

Среда .NET Framework поддерживает не все версии каждой платформы. Поддерживаемые версии перечислены в разделе Требования к системе для .NET Framework.

Любые открытые static (Shared в Visual Basic) члены этого типа являются потокобезопасными. Потокобезопасность членов экземпляров не гарантируется.

Добавления сообщества

ДОБАВИТЬ
Показ:
© 2014 Microsoft