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) |