Перейти до основного
Підтримка
Вхід

Як передавати та завантажувати файли з віддаленого сервера в ASP.NET

ВСТУП

У цій статті описано на зразок все в одному рамки, доступний для завантаження. Цьому прикладі показано, як передавати та завантажувати файли з локального або віддаленого комп'ютера сервера в ASP.NET. Приклад пакети можна завантажити з указаних нижче піктограм для завантаження. Як C# і Visual Basic .NET мовні версії пакета зразки доступні.


Цьому прикладі показано, як завантаження і завантаження файлів із сервера, який не є користувача запит домену рамки. Функціональні можливості, для передачі файлів, які як HTTP, так і FTP протоколів. Крім того, цей коді використовується уніфікований ресурсів, ідентифікатори (URIs) визначити розташування файлів на сервері. Основні класи в цьому прикладі, які WebClient клас і класи класу.

Рівень складності




alternate text

Відомості про завантаження

Для завантаження в цьому прикладі, клацніть одне з наведених нижче посилань:

Технічний огляд

Це досить легко завантажувати і завантажувати файли з віддаленого сервера, на ASP.NET. З бібліотекою класів .NET Framework, наведено деякі об'єкти, легкий запит. Клас WebClient , це високого класу, що спрощує взаємодії з сервером. Класи об'єкти використовуються WebClient клас зробити запитів. HttpWebRequest і FtpWebRequest класи — це протокол рівні реалізації анотація класи класу. HttpWebRequest , реалізує GET і POST методи протоколу HTTP, для завантаження і завантаження файлів. FtpWebRequest , реалізує STOR і ретро методи протоколом FTP для завантаження і завантаження файлів.


Цьому прикладі використовується UploadData та DownloadData методи WebClient класу для передачі даних до та з віддаленого сервера, URI. UploadData метод, що використовується при ПОСТАВИТИ протоколу HTTP, і на "застосунку/x-www-form-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

Візуальні Basic.NET

VRemoteUploadAndDownload

Технологія категорії

  • ASP.NET 2.0

  • ASP.NET 3.5

  • ASP.NET 4.0

Посилання

Щоб отримати додаткові відомості про клас WebClient відвідайте веб-сайт корпорації Майкрософт для розробників (MSDN):

Загальні відомості про клас WebClientЩоб отримати додаткові відомості про метод UploadData відвідайте такий веб-сайт MSDN:

Загальні відомості про спосіб UploadDataЩоб отримати додаткові відомості про метод DonwloadData відвідайте такий веб-сайт MSDN:

Загальні відомості про спосіб DonwloadDataЩоб отримати додаткові відомості про метод FtpWebRequest відвідайте такий веб-сайт MSDN:

Загальні відомості про спосіб FtpWebRequestЩоб отримати додаткові відомості про те, як завантажувати файли з FTP відвідайте такий веб-сайт MSDN:

Як завантажити файли з FTP

Додаткові відомості

Що таке все в одному з кодом Framework

Більшість Microsoft розробки технології, за допомогою все в одному з кодом Framework показує, за допомогою приклади коду для різних мов програмування. Кожному прикладі ретельно встановлено, у складі і задокументовані для відображення одного зазвичай за сценарієм коду. Щоб отримати додаткові відомості про все в одному з кодом Framework відвідайте веб-сайт корпорації Майкрософт:

http://1code.codeplex.com

Як знайти більше-все в одному з кодом Framework зразків

Щоб знайти більше-все в одному з кодом Framework зразків, знайдіть "kbcodefx" разом з пов'язаних ключових слів, у Microsoft веб-сайт підтримки. Крім того, відвідайте веб-сайт корпорації Майкрософт:

Все в одному з кодом Framework зразків

Швидке відмову від гарантій щодо публікації

Корпорація Майкрософт та/або її постачальники не роблять жодних заяв про придатність, надійність або точність інформації і графічних матеріалів. Такі відомості та графічні надається "як є" без будь-яких гарантій. Корпорація Майкрософт та/або її постачальники тим самим відмовляються від, усі гарантій і умов стосовно цієї інформації та пов'язані з графіки, включаючи всі гарантії та умови придатності для певної мети, високої на нього та непорушення прав. Зокрема погоджуєтеся, що не корпорації Майкрософт та/або її постачальники несе відповідальності за будь-які прямі, непрямі, штрафні, випадкові, особливі, непрямі збитки або збитки взагалі включаючи, без обмеження, збитки за втрату даних використання або прибуток, що виникають, або будь-яким способом, пов'язані з використанням або неможливістю використання відомостей і графічних матеріалів, за контракту, цивільного правопорушення, необережності, об'єктивної відповідальності або іншим чином, навіть якщо корпорації Майкрософт або будь-якої з її постачальників відобразиться відповідна підказка про можливість таких збитків.

Потрібна додаткова довідка?

Отримуйте нові функції раніше за інших
Приєднатися до Microsoft оцінювачів

Чи були ці відомості корисні?

Дякуємо за ваш відгук!

Дякуємо, що знайшли час і надіслали нам відгук! Можливо, у нас не буде часу відповісти на кожен коментар, але докладемо максимум зусиль, щоб переглянути їх усі. Вас цікавить, як ми використовуємо ваші відгуки?

×