ВВЕДЕНИЕ

Данная статья содержит пример framework все-в-одном, который доступен для загрузки. В этом примере кода показано, как отправлять и загружать файлы с локального или удаленного сервера в ASP.NET. Следующие значки загрузки можно загрузить образцы пакетов. C# и Visual Basic .NET версии образца пакета доступны.


В этом примере кода показано, как отправлять и загружать файлы с сервера, который не входит в область запроса пользователя домена. Функциональность доступна для передачи файлов с помощью протоколов HTTP и FTP. Кроме того этот пример кода использует универсальные коды ресурсов (URI) для определения расположения файлов на сервере. Основные классы, используемые в этом примере кода — класс WebClient и класс WebRequest .

Уровень сложности




alternate text

Информация о скачивании

Чтобы загрузить этот образец кода, щелкните одну из следующих ссылок:

Технический обзор

Это довольно легко отправлять и загружать файлы с удаленного сервера в ASP.NET. Библиотека классов платформа.NET Framework предоставляет объекты упрощенный запрос. Класс WebClient является классом высокого уровня, который облегчает взаимодействие сервера. Класс WebRequest объекты используются с помощью класса WebClient для выполнения запросов. Классы HttpWebRequest и FtpWebRequest , определенный протокол реализации абстрактного класса WebRequest . HttpWebRequest реализует методы GET и POST протокола HTTP для выгрузки и загрузки файлов. FtpWebRequest реализует методы STOR и RETR протокола FTP для передачи файлов.


Этот пример кода использует методы UploadData и DownloadData класса WebClient для передачи данных из удаленных URI сервера. С помощью метода PUT протокола HTTP используется метод UploadData и «приложения/x-www-формы-urlencoded» Интернет тип носителя. Метод DownloadData используется с помощью объекта FileStream для хранения входной поток данных и запись массива байтов в локальный файл.

Общие сведения о примере

В этом примере кода вы найдете файл RemoteFileForm.aspx, который объясняет, как использовать два новых класса:

  • RemoteUpload

  • RemoteDownload

Класс RemoteUpload

Класс RemoteUpload имеет два дочерних классов. Эти классы являются HttpRemoteUpload и FtpRemoteUpload. Оба класса с помощью конструктора RemoteUpload . Класс RemoteUpload требует массив байтов данных файлов и URI-адрес сервера. Также можно указать имя, используемое для передаваемого файла. Класс FtpRemoteUpload использует FtpWebRequest напрямую (вместо класс WebClient более высокого уровня) для удовлетворения конкретных требований протокола FTP.


Дополнительные сведения о классе RemoteUpload следующие определения класса см.
public class HttpRemoteUpload : RemoteUpload
{
public HttpRemoteUpload(byte[] fileData, string fileNamePath, string urlString)
: base(fileData, fileNamePath, urlString)
{

}

public override bool UploadFile()
{
byte[] postData;
try
{
postData = this.FileData;
using (WebClient client = new WebClient())
{
client.Credentials = CredentialCache.DefaultCredentials;
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
client.UploadData(this.UrlString, "PUT", postData);
}

return true;
}
catch (Exception ex)
{
throw new Exception("Failed to upload", ex.InnerException);
}

}
}

public class FtpRemoteUpload : RemoteUpload
{
public FtpRemoteUpload(byte[] fileData, string fileNamePath, string urlString)
: base(fileData, fileNamePath, urlString)
{

}

public override bool UploadFile()
{
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(this.UrlString);
reqFTP.KeepAlive = true;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.ContentLength = this.FileData.Length;

int buffLength = 2048;
byte[] buff = new byte[buffLength];
MemoryStream ms = new MemoryStream(this.FileData);

try
{
int contenctLength;
using (Stream strm = reqFTP.GetRequestStream())
{
contenctLength = ms.Read(buff, 0, buffLength);
while (contenctLength > 0)
{
strm.Write(buff, 0, contenctLength);
contenctLength = ms.Read(buff, 0, buffLength);
}
}

return true;
}
catch (Exception ex)
{
throw new Exception("Failed to upload", ex.InnerException);
}
}

} При нажатии кнопки Отправить в файле RemoteFileForm.cs создается экземпляр объекта RemoteUpload . Передать URI-адрес сервера и путь к локальному файлу физической в качестве параметров для создания объекта.


Примечание. Если не указать имя файла для сохранения файла на сервере, система автоматически создаст имя файла текущей даты и времени на сервере. Дата и время с точностью до миллисекунд. После завершения работы метода UploadData , результат отображается на текущей странице.

Класс RemoteDownload

Класс RemoteDownload также имеет два дочерних классов. Эти классы являются HttpRemoteDownload и FtpRemoteDownload. Класс RemoteDownload требует URI ресурса и локальный физический каталог. Класс RemoteDownload проверяет, чтобы убедиться в том, что URI ресурса существует до загрузки запускается. Класс получает поток, содержащий данные ответа от сервера, а затем записывает байтовый массив FileStream. Класс FtpRemoteDownload использует FtpWebRequest напрямую (вместо класс WebClient более высокого уровня) для удовлетворения конкретных требований протокола FTP.


Дополнительные сведения о классе RemoteDownload следующие определения класса см.
public class HttpRemoteDownload : RemoteDownload
{
public HttpRemoteDownload(string urlString, string descFilePath)
: base(urlString, descFilePath)
{

}

public override bool DownloadFile()
{
string fileName = System.IO.Path.GetFileName(this.UrlString);
string descFilePathAndName =
System.IO.Path.Combine(this.DescFilePath, fileName);
try
{
WebRequest myre = WebRequest.Create(this.UrlString);
}
catch
{
return false;
}
try
{
byte[] fileData;
using (WebClient client = new WebClient())
{
fileData = client.DownloadData(this.UrlString);
}
using (FileStream fs =
new FileStream(descFilePathAndName, FileMode.OpenOrCreate))
{
fs.Write(fileData, 0, fileData.Length);
}
return true;
}
catch (Exception ex)
{
throw new Exception("download field", ex.InnerException);
}
}
}

public class FtpRemoteDownload : RemoteDownload
{
public FtpRemoteDownload(string urlString, string descFilePath)
: base(urlString, descFilePath)
{

}

public override bool DownloadFile()
{
FtpWebRequest reqFTP;

string fileName = System.IO.Path.GetFileName(this.UrlString);
string descFilePathAndName =
System.IO.Path.Combine(this.DescFilePath, fileName);

try
{

reqFTP = (FtpWebRequest)FtpWebRequest.Create(this.UrlString);
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;


using (FileStream outputStream = new FileStream(descFilePathAndName, FileMode.OpenOrCreate))
using (FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse())
using (Stream ftpStream = response.GetResponseStream())
{
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
}
return true;
}

catch (Exception ex)
{
throw new Exception("upload failed", ex.InnerException);
}
}
}
Примечание. Дополнительные сведения о том, как создать и развернуть образец приложения содержатся в файле Readme.txt, входящие в пакет загрузки.


Языки

В этом примере кода доступна на следующих языках программирования:

Язык

Имя проекта

Visual C#

CSRemoteUploadAndDownload

Visual Basic.NET

VRemoteUploadAndDownload

Категории технологии

  • ASP.NET 2.0

  • ASP.NET 3.5

  • ASP.NET 4.0

Ссылки

Дополнительные сведения о класс WebClient посетите следующий веб-узел Microsoft Developer (MSDN):

Общие сведения о класс WebClientДополнительные сведения о методе UploadData посетите следующий веб-узел MSDN:

Общие сведения о методе UploadDataДополнительные сведения о методе DonwloadData посетите следующий веб-узел MSDN:

Общие сведения о методе DonwloadDataДополнительные сведения о методе FtpWebRequest посетите следующий веб-узел MSDN:

Общие сведения о методе FtpWebRequestДополнительные сведения об отправке файлов по протоколу FTP, посетите следующий веб-узел MSDN:

Процесс загрузки файлов по протоколу FTP

Дополнительные сведения

Что такое инфраструктура кода все в одном

Все-в-одном среды разработки программного кода показано большинства методов разработки Майкрософт с помощью примеров кода на различных языках программирования. В каждом примере тщательно выбран, состоит и задокументированы для отображения одним из распространенных сценариев код. Дополнительные сведения о все-в-одном среды разработки программного кода посетите следующий веб-узел корпорации Майкрософт:

http://1code.codeplex.com

Как найти дополнительные примеры кода All-In-One Code Framework

Чтобы найти дополнительные примеры кода Framework все-в-одном, поиск «kbcodefx», а также связанные ключевые слова на Microsoft поддерживают веб-узла. Или посетите следующий веб-узел корпорации Майкрософт:

Примеры кода Framework все-в-одном

Отказ от быстрой публикации

Корпорация Майкрософт или ее поставщиков соответствующих не делают никаких утверждений о пригодности, надежность и точность данных и связанные рисунки, содержащиеся в настоящем документе. Такой информации и связанные рисунки предоставляются «как есть» без гарантий любого рода. Корпорация Майкрософт и ее партнерам соответствующих настоящим отказываются от всех гарантий и условий в отношении этой информации и связанные с ним графические элементы, включая все подразумеваемые гарантии и условия товарности, пригодности для определенной цели, качества объем работ, названия и ненарушения. Вы явным образом согласитесь, что не Майкрософт или ее поставщики несут ответственности за любой прямой, косвенный, punitive, случайные, специальные, косвенные убытки или любой ущерб ни при каких обстоятельствах включая, без ограничений, ущерб, потерю данных, использования или Прибыль, возникающие из или каким-либо образом связаны с использования или невозможности использования информации и связанные рисунки, содержащиеся в настоящем документе, на основании контракта, гражданским правонарушением, небрежностью, строгая ответственность или в противном случае, даже если корпорация Майкрософт или ее поставщиков Рекомендуется по возможности ущерба.

Нужна дополнительная помощь?

Совершенствование навыков
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединение к программе предварительной оценки Майкрософт

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?

Спасибо за ваш отзыв!

×