UVOD
Ovaj članak opisuje uzorak za sve-u-jednom okvir koji je dostupan za preuzimanje. Ovaj uzorak koda ilustruje kako se otpremanje i preuzimanje datoteka sa udaljenim ili lokalnih servera u ASP.NET. Uzorak pakete možete preuzeti sa sledeće preuzimanje ikona. Dostupni su i C# i Visual Basic .NET verzije jezika paketa za uzorak.
Ovaj uzorak koda ilustruje kako se postavljaju i skidaju datoteke sa servera koji se ne nalazi na obim domena zahtev korisnika. Funkcionalnost je obezbeđena za prenošenje datoteka putem HTTP i FTP protokola. Osim toga, ovaj uzorak koda koristi Uniform Resource identifikatora (juris) za identifikaciju lokacije datoteke na serveru. Ključni klase koristi u ovaj uzorak koda su WebClient razreda i WebRequest razreda.
Nivo težine
Informacije o preuzimanju
Da biste preuzeli ovaj uzorak koda, izaberite jednu od sledećih veza:
Tehnički pregled
To je vrlo lako za otpremanje i preuzimanje datoteka sa udaljenog servera u ASP.NET. Biblioteka klasa .NET Framework pruža neke objekte lagani zahtev. WebClient predavanja su na visokom nivou klase koji olakšava server interakcije. WebRequest objekti su koristi WebClient razreda da bi zahtjeve. HttpWebRequest i FtpWebRequest klase su specifične za protokol primene izvoda WebRequest klase. HttpWebRequest implementira se i POST metoda HTTP protokola za otpremanje i preuzimanje datoteka. FtpWebRequest implementira metoda "SKDIŠTI" i "RETR" FTP protokola za otpremanje i preuzimanje datoteka.
Ovaj uzorak koda, UploadData i DownloadData metode u klasi WebClient se koristi za prenos podataka u i iz udaljenog servera URI. UploadData metod se koristi sa HTTP protokol je STAVITI metod i upišite „aplikacija/x-www-form-urlencoded” Internet medijima. Metod DownloadData se koristi FileStream objekat za skladištenje dolazni prenos podataka i napisati bajt niza u lokalnu datoteku.
Pregled uzorka
U ovaj uzorak koda, pronaći ćete datoteku RemoteFileForm.aspx koja objašnjava kako se koristi sledeća dva nova predmeta:
-
RemoteUpload
-
RemoteDownload
RemoteUpload klasa
U RemoteUpload razredu ima dve klase dete. Ovi časovi su HttpRemoteUpload i FtpRemoteUpload. Oba predavanja koristi se RemoteUpload konstruktor. U RemoteUpload razredu zahteva niz bajt podataka datoteka i server URI. Takođe možete navesti ime ćete koristiti za otpremljene datoteku. U FtpRemoteUpload razredu koristi FtpWebRequest direktno (a ne pomoću višeg nivoa WebClient klase) postupati sa specifičnim zahtevima FTP protokola.
Pogledajte sledeći definicije klase za više informacija o RemoteUpload klasa:
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);
}
}
} U datoteci "RemoteFileForm.cs", kada kliknete na dugme " Otpremi ", instanca objekta RemoteUpload se kreira. Dodaj server URI i putanja lokalne fizičke datoteke kao parametre da biste kreirali objekat.
Napomena Ako ne navedete ime datoteke se koristi za skladištenje datoteka na serveru, sistem će automatski generisati ime datoteke prema trenutni datum i vreme na serveru. Datum i vreme ne bude tačan u Milisekunda. Kada završi sa UploadData metod, rezultat je prikazan na ovoj stranici.
RemoteDownload klasa
U RemoteDownload razredu ima i dve klase dete. Ovi časovi su HttpRemoteDownload i FtpRemoteDownload. U RemoteDownload razredu zahteva URI resurs i lokalni fizički direktorijum. U RemoteDownload razredu proverava da li je počeo da se uverim da URI resurs postoji pre preuzimanja. Razredu preuzima potoku, koji sadrži podatke kao odgovor sa servera, a zatim upisuje ovaj bajt niza na FileStream. U FtpRemoteDownload razredu koristi FtpWebRequest direktno (a ne pomoću višeg nivoa WebClient klase) postupati sa specifičnim zahtevima FTP protokola.
Pogledajte sledeći definicije klase za više informacija o RemoteDownload klasa:
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);
}
}
}
Napomena Za više informacija o tome kako da kreirate i uvedete uzorak aplikacija, pogledajte Readme.txt datoteku koja je uključena u paket za preuzimanje.
Jezici
Ovaj uzorak koda je dostupna u sledećim programskim jezicima:
Jezik |
Ime projekta |
---|---|
Visual C# |
CSRemoteUploadAndDownload |
Visual Basic.NET |
VRemoteUploadAndDownload |
Tehnologija kategorija
-
ASP.NET 2.0
-
ASP.NET 3.5
-
ASP.NET 4.0
Reference
Za više informacija o WebClient razreda, posetite Web lokaciju sledeće Microsoft Developer (MSDN):
Opšte informacije o WebClient razredaZa više informacija o načinu UploadData , posetite sledeću MSDN Web lokaciji:
Opšte informacije o metodi UploadDataZa više informacija o načinu DonwloadData , posetite sledeću MSDN Web lokaciji:
Opšte informacije o metodi DonwloadDataZa više informacija o načinu FtpWebRequest , posetite sledeću MSDN Web lokaciji:
Opšte informacije o metodi FtpWebRequestZa više informacija o tome kako da biste otpremili datoteke sa FTP, posetite sledeću MSDN Web lokaciji:
Više informacija
Da li je to sve-u-jednom Šifra Framework?
Sve-u-jednom Šifra okvir prikazuje većinu Microsoft razvojne tehnike pomoću primjere koda u različitim programskim jezicima. Svaki primer je pažljivo izabran sastoji i dokumentovano pokazati jedan zajednički Šifra scenarija. Za više informacija o sve-u-jednom Šifra Framework, posetite sledeće Microsoft Web lokacije:
Kako da pronađem više uzoraka koda Framework sve-u-jednom
Da biste pronašli više uzoraka koda Framework sve-u-jednom, potraga za „kbcodefx” zajedno sa srodnim ključne reči na Microsoft podržava Web lokacije. Ili, posetite sledeće Microsoft Web lokacije:
All-In-One uzorke koda Framework
Brza objavljivanje Odricanje odgovornosti
Korporacija Microsoft i/ili njeni odgovarajućih dobavljači ne daju o PRIKLADNOSTI, pouzdanost ili tačnost informacija i povezane grafike sadržanih u ovom dokumentu. Sve takve informacije i povezane grafike su obezbeđuje „kakav je” bez garancije bilo koje vrste. Microsoft i/ili njeni odgovarajućih dobavljači ovim disclaim sve garancije i uslove u pogledu ove informacije i povezane grafike, uključujući i sve podrazumevane garancije i PRIKLADNOSTI za određenu svrhu, strokovne uslova trud, naslov i NEKRŠENJE. Posebno ti se slažu da u nijedan događaj Microsoft i/ili njegovi dobavljači biti odgovorni za nikakve direktne, indirektne, kaznene, slučajne, posebne, posledične štete ili bilo kakvu štetu nikakve uključujući, bez ograničenja, štete zbog gubitka upotrebe, podataka ili profit, koje proističu iz ili na bilo koji način povezani sa upotreba ili nemogućnošću upotrebe informacija i povezane grafike sadržani, da li je zasnovana na ugovor, delikt, nemar, strogu odgovornost ili na drugi način, čak i ako je Microsoft ili bilo koji od njegovih snabdevača na oprezu o mogućnosti nastanka štete.