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","[email protected]");
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","[email protected]");
// 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 является escape-файлом "/"), то 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 свойства . При превышении времени ожидания вызывающий метод вызывает исключение с заданным значением WebExceptionTimeout.WebExceptionStatus
Если при скачивании файла с FTP-сервера команда была выполнена успешно, содержимое запрошенного файла будет доступно в потоке объекта ответа. Доступ к этому потоку можно получить, вызвав GetResponseStream метод . Для получения дополнительной информации см. FtpWebResponse.
Proxy Если свойство задано напрямую или в файле конфигурации, обмен данными с FTP-сервером осуществляется через указанный прокси-сервер. Если указанный прокси-сервер является прокси-сервером HTTP, поддерживаются только DownloadFileкоманды , ListDirectoryи ListDirectoryDetails .
Кэшируется только скачаемое двоичное содержимое; то есть содержимое, полученное DownloadFile с помощью команды со свойством UseBinary , равным true
.
Несколько 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) |