Cum se încărca şi descărca fişiere de pe un server la distanță în ASP.NET

Se aplică la: ASP.NET on .NET Framework 3.5 Service Pack 1

INTRODUCERE


Acest articol descrie un eșantion într-un singur cadru care este disponibil pentru descărcare. Acest cod de exemplu demonstrează cum se încărca şi descărca fişiere de pe un server la distanță sau locale în ASP.NET. Aveți posibilitatea să descărcați pachetele eșantion din următoarele pictograme de descărcare. Atât C# și Visual Basic .NET versiuni de limbă a pachetului de probă sunt disponibile.


Acest cod de exemplu demonstrează cum se încărca şi descărca fişiere de pe un server care nu este în domeniul de domeniu de solicitare a utilizatorului. Funcționalitatea este furnizat pentru transferul fișierelor cu atât HTTP și FTP protocoale. De asemenea, această mostră de cod utilizează Uniform Resource Identifiers (uri) pentru a identifica locațiile de fișiere pe un server. Clase cheie utilizate în acest exemplu de cod sunt clasa WebClient și clasa WebRequest .

Dificultate


Informații despre Descărcare

Pentru a descărca acest exemplu de cod, faceți clic pe unul dintre următoarele linkuri:

Prezentare generală a tehnice

Este destul de ușor pentru a încărca şi descărca fişiere de pe un server la distanță în ASP.NET. Biblioteci de clase .NET Framework oferă unele obiecte lightweight solicitarea. Clasa WebClient este o clasă de nivel înalt, care simplifică server interacțiuni. WebRequest obiecte sunt utilizate WebClient clasă de a face cereri. Clase HttpWebRequest și FtpWebRequest sunt specifice protocol implementările de abstract WebRequest class. HttpWebRequest implementează metode GET şi POST de protocolul HTTP pentru a încărca şi descărca fişiere. FtpWebRequest implementează metode STOR și j protocolului FTP pentru a încărca şi descărca fişiere.


Această mostră de cod utilizează metodele UploadData și DownloadData a clasei WebClient transferul de date şi de la un server la distanță URI. Metoda UploadData se utilizează protocolul HTTP pune metoda și "application/x-www-form-urlencoded" Internet tip media. Metoda DownloadData se utilizează cu un obiect de FileStream pentru a stoca fluxul de date de intrare și scrie octeți matrice într-un fișier local.

Prezentare generală a eșantion

În acest exemplu de cod, veți găsi fișierul RemoteFileForm.aspx care explică cum se utilizează următoarele două clase noi:
  • RemoteUpload
  • RemoteDownload

Clasa RemoteUpload

Clasa RemoteUpload are două clasele. Aceste clase sunt HttpRemoteUpload și FtpRemoteUpload. Ambele clase utilizați RemoteUpload constructor. Clasă de RemoteUpload necesită o gamă de octeți de date de fișier și un server URI. De asemenea, puteţi specifica numele de utilizat pentru fișierul încărcat. Clasa FtpRemoteUpload utilizează FtpWebRequest direct (în loc să utilizaţi clasei WebClient de nivel superior) să gestioneze cerințele specifice ale protocolul FTP.


Consultați următoarele definiții class pentru mai multe informații despre clasa 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);
}
}

}
În fișierul RemoteFileForm.cs, atunci când faceți clic pe butonul de încărcare , o instanță a obiectului RemoteUpload este creat. Trece serverul URI și o cale de fișier local fizic ca parametri pentru a crea obiectul.


Notă Dacă nu specificați un nume de fișier se utilizează pentru a stoca fișierul pe server, sistemul va genera automat un nume de fișier în conformitate cu data și ora curentă pe server. Data și ora sunt corecte pentru milisecunde. După ce se termină metoda UploadData , rezultatul este afișat pe pagina curentă.

Clasa RemoteDownload

Clasă de RemoteDownload are, de asemenea, două clasele. Aceste clase sunt HttpRemoteDownload și FtpRemoteDownload. Clasă de RemoteDownload necesită o resursă URI și un director local fizic. Clasa RemoteDownload verifică pentru a vă asigura că resursa URI există înainte de a descărca este pornit. Clasa preia fluxul care conține date de răspuns de la server, apoi scrie această serie de octeți de o FileStream. Clasa FtpRemoteDownload utilizează FtpWebRequest direct (în loc să utilizaţi clasei WebClient de nivel superior) să gestioneze cerințele specifice ale protocolul FTP.


Consultați următoarele definiții class pentru mai multe informații despre clasa 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);
}
}
}

Notă Pentru mai multe informații despre modul de creare și implementare aplicație exemplificativă, consultați fișierul Readme.txt care este inclus în pachetul.


Limbi

Această mostră de cod este disponibilă în următoarele limbi programare:

LimbăNume de proiect
Visual C#CSRemoteUploadAndDownload
Visual Basic.NETVRemoteUploadAndDownload

Tehnologie categorie

  • ASP.NET 2.0
  • ASP.NET 3.5
  • ASP.NET 4.0

Referințe

Pentru mai multe informații despre clasa WebClient , vizitați următorul site Web Microsoft Developer (MSDN):
Pentru mai multe informații despre metoda UploadData , vizitați următorul site Web MSDN:
Pentru mai multe informații despre metoda DonwloadData , vizitați următorul site Web MSDN:
Pentru mai multe informații despre metoda FtpWebRequest , vizitați următorul site Web MSDN:
Pentru mai multe informații despre cum să încărcați fișierele cu FTP, vizitați următorul site Web MSDN:

Mai multe informații


Ce este într-un singur cod Framework?

Cadru de cod într-un singur prezintă cele mai multe tehnici de dezvoltare Microsoft utilizând exemple de cod în diferite limbaje de programare. Fiecare exemplu este atent selectat, compus și documentate pentru a afișa un scenariu de cod comune. Pentru mai multe informații despre într-un singur cod Framework, vizitați următorul site Web Microsoft:

Cum să găsiți mai multe exemple de cod Framework într-un singur

Pentru a găsi mai multe exemple de cod Framework într-un singur, căutați "kbcodefx" împreună cu cuvinte cheie legate de pe Microsoft acceptă site-ul Web. Sau, vizitați următorul site Web Microsoft:
Exonerare de răspundere publicare rapidă
Microsoft corporation și/sau furnizorii face nici o reprezentare despre potrivirea, fiabilitatea sau acuratețea informațiilor și elemente grafice asociate conținute în acest document. Toate aceste informații și elemente grafice asociate sunt furnizate "ca atare" fără nici un fel de garanție. Microsoft și/sau furnizorii se exclud toate garanțiile și condițiile cu privire la aceste informații și legate de grafică, inclusiv toate garanţiile implicite de vandabilitate, potrivire pentru un anumit scop, uman efort, titlu şi NEÎNCĂLCARE. Sunteți de acord în mod special că nu este Microsoft și/sau furnizorii săi răspunzătoare pentru orice directe, indirecte, punitive, incidente, daune speciale, indirecte sau daunele inclusiv fel, fără limitare, daune pentru pierderea de utilizare, date sau profituri, din sau în orice fel legate de utilizarea sau incapacitatea de a utiliza informații și elemente grafice asociate conținute aici, dacă pe bază de contract, ofensă, neglijență, răspundere strictă sau în alt mod, chiar dacă a fost Microsoft sau oricare dintre furnizorii săi informat de posibilitatea de daune.