Как да качите и изтегляне на файлове от отдалечен сървър в ASP.NET

Въведение

Тази статия описва всичко в едно рамка проба, която е налична за изтегляне. Този примерен код показва как да качите и изтегляне на файлове от отдалечен или локален сървър на ASP.NET. Можете да изтеглите примерни пакети от следните икони за изтегляне. Има C# и Visual Basic .NET езикови версии на пакета за проба.


Този примерен код показва как да качите и изтегляне на файлове от сървър, който не е в обхвата на потребителската заявка за домейн. Функционалност е предназначена за прехвърляне на файлове с FTP и HTTP протоколи. Освен това този примерен код използва Uniform Resource идентификатори (URI адреси) да определи местоположението на файлове на сървъра. Основни класове в този примерен код са WebClient и WebRequest класа.

Ниво на сложност




alternate text

Информация за изтегляне

За да изтеглите този примерен код, щракнете върху една от следните връзки:

Технически преглед

Това е доста лесен за качване и изтегляне на файлове от отдалечен сървър в ASP.NET. Библиотека за клас .NET Framework предоставя някои леки заявка обекти. WebClient клас е високо ниво клас, който улеснява сървър взаимодействия. WebRequest обекти се използват от клас WebClient да направи заявки. HttpWebRequest и FtpWebRequest класове са протокол специфични реализации на абстрактно WebRequest клас. HttpWebRequest прилага GET и POST методите на HTTP протокол за качване и изтегляне на файлове. FtpWebRequest прилага СЪХРАНЕН и ре методите на протокола 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

Visual Basic.NET

VRemoteUploadAndDownload

Технология за категория

  • ASP.NET 2.0

  • ASP.NET 3.5

  • ASP.NET 4.0

Препратки

За повече информация относно WebClient клас посетете следния уеб сайт на разработчици на Microsoft (MSDN):

Обща информация за WebClient класЗа повече информация относно метода UploadData посетете следния уеб сайт на MSDN:

Обща информация за метода UploadDataЗа повече информация относно метода DonwloadData посетете следния уеб сайт на MSDN:

Обща информация за метода DonwloadDataЗа повече информация относно метода FtpWebRequest посетете следния уеб сайт на MSDN:

Обща информация за метода FtpWebRequestЗа повече информация относно начина за качване на файлове с FTP посетете следния уеб сайт на MSDN:

Как да качите файлове с FTP

Допълнителна информация

Какво е всичко в едно код рамка?

Всичко в едно рамка код показва най-техники за развитие на Microsoft чрез примерен код в различни езици за програмиране. Всеки пример е внимателно избран съставен и документирани, за да покаже един общ код сценарий. За повече информация за всичко в едно код рамка посетете следния уеб сайт на Microsoft:

http://1code.codeplex.com

Как да намерите повече всичко в едно рамка код примери

За да намерите още всичко в едно рамка код проби, потърсете "kbcodefx" с ключови думи на Microsoft поддръжка уеб сайт. Или, посетете следния уеб сайт на Microsoft:

Всичко в едно рамка код примери

Бързо публикуване отказ от отговорност

Microsoft corporation и/или съответните й доставчици не дават гаранция за пригодността, надеждността или точността на информацията и свързаните графики, съдържащи се в нея. Тази информация и свързаните графики се предоставят "както са" без никакви гаранции. Microsoft и/или съответните й доставчици се отказват от всякакви гаранции и условия по отношение на тази информация и свързани с графики, включително всички подразбиращи се гаранции и условия за продаваемост, годност за определена цел, работно усилие, заглавие и ненарушаване. Специално Вие се съгласявате, че в никакъв случай Microsoft и/или неговите доставчици носи отговорност за преки, косвени, наказателни, случайни, специални, закономерни щети или вреди, каквато включително, без ограничение, обезщетение за загуба на употреба, данни или печалби, възникващи от или по някакъв начин свързани с използването или невъзможността да се използва информацията и свързаните графики, съдържащи се в нея, въз основа на договор, закононарушение, небрежност, обективна отговорност или по друг начин, дори ако Microsoft или от неговите доставчици не е уведомен за възможността за вреди.

Нуждаете се от още помощ?

Разширете уменията си
Преглед на обучението
Получавайте първи новите функции
Присъединете се към Microsoft приобщени

Беше ли полезна тази информация?

Благодарим ви за обратната връзка!

Благодарим ви за вашата обратна връзка. Изглежда, че ще бъде полезно да ви свържем с един от нашите агенти по поддръжката на Office.

×