UVOD
Ovaj članak opisuje uzorak sve-u-jednom framework koji je dostupan za preuzimanje. Ovaj uzorak koda demonstrira kako prenijeti i preuzeti datoteke iz lokalnog ili udaljenog poslužitelja u ASP.NET. Uzorak pakete možete preuzeti iz sljedeće ikone preuzimanje. Dostupne su i C# i Visual Basic .NET jezične verzije paketa uzorka.
Ovaj uzorak koda demonstrira kako prenijeti i preuzeti datoteke s poslužitelja koji nije u dosegu domene zahtjev korisnika. Funkcija je dana za prijenos datoteka s protokoli HTTP i FTP. Također, ovaj uzorak koda koristi ujednačeno identifikatora resursa (URIs) za identifikaciju mjesta datoteke na poslužitelju. Klasa ključa koristi ovaj uzorak koda su klase WebClient i WebRequest klase.Na kojoj razini težine
Preuzimanje informacija o
Da biste preuzeli ovaj uzorak koda, kliknite jednu od sljedećih veza:
Pregled tehničkih informacija
Je prilično jednostavan za prijenos i preuzeti datoteke iz udaljenog poslužitelja u ASP.NET. Biblioteka klasa .NET Framework pruža neke objekte laganih zahtjev. Klasa WebClient je visoke razine klasa koja čini poslužitelja interakcije lakše. WebRequest objekti koriste klase WebClient zahtjeva. Klase HttpWebRequest i FtpWebRequest su specifične za protokol implementacije sažetak klase WebRequest . HttpWebRequest implementira DOHVATI i POST metode HTTP protokola za prijenos i preuzimanje datoteka. FtpWebRequest implementira POHR i ponovno pokušaj 'RE metode FTP protokola za prijenos i preuzimanje datoteka.
Ovaj uzorak koda koristi UploadData i DownloadData metode WebClient klase za prijenos podataka i s udaljenim poslužiteljem URI. Koristi način UploadData s HTTP protokola način SKLADIŠTENJA i upišite "aplikacija/x-www-form-urlencoded" Internet medija. Metoda DownloadData koristi uz datoteke FileStream objekt za spremanje dolazne strujanje podataka i pisanje raspon bajtova lokalne datoteke.Uzorak pregled
U ovaj uzorak koda će pronaći datoteku RemoteFileForm.aspx koji objašnjava kako koristiti sljedeće dvije nove klase:
-
RemoteUpload
-
RemoteDownload
RemoteUpload klasa
Klasa RemoteUpload ima dva podređena klasa. Ove klase su HttpRemoteUpload i FtpRemoteUpload. Oba klase koristite Graditelj RemoteUpload . Klasa RemoteUpload zahtijeva raspon bajtova podataka datoteke i server URI. Možete navesti naziv za učitanu datoteku. Klasa FtpRemoteUpload koristi FtpWebRequest izravno (umjesto korištenja više razine klase WebClient ) za rukovanje specifičnim preduvjetima FTP protokola.
Pogledajte sljedeće klase definicije za dodatne informacije o RemoteUpload klase: 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 gumb Prenesi stvara se instanca objekta RemoteUpload . Prenesite na poslužitelj URI i put lokalne datoteke fizičke kao parametre za stvaranje objekta. Napomena Ako ne odredite naziv datoteke za spremanje datoteke na poslužitelju, sustav automatski generirati naziv datoteke prema trenutnom datumu i vremenu na poslužitelju. Datum i vrijeme je precizan na millisecond. Po završetku metodu UploadData rezultat prikazan na trenutnoj stranici.RemoteDownload klasa
Klasa RemoteDownload ima dva podređena klasa. Ove klase su HttpRemoteDownload i FtpRemoteDownload. Klasa RemoteDownload zahtijeva URI resursa i lokalni direktorij fizičke. Klasa RemoteDownload provjerava je li URI resursa postoji prije preuzimanja je pokrenut. Klasa dohvaća strujanje koji sadrži odgovor podatke s poslužitelja i zapisuje ovaj raspon bajtova na svojstvu FileStream. Klasa FtpRemoteDownload koristi FtpWebRequest izravno (umjesto korištenja više razine klase WebClient ) za rukovanje specifičnim preduvjetima FTP protokola.
Pogledajte sljedeće klase definicije za dodatne informacije o RemoteDownload klase: 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 Dodatne informacije o tome kako stvarati i implementirati probna aplikacija potražite u datoteci Readme.txt u paketu za preuzimanje.Jezici
Ovaj uzorak koda je dostupna u sljedeći programski jezici:
Jezik |
Naziv projekta |
---|---|
Visual C# |
CSRemoteUploadAndDownload |
Vizualna Basic.NET |
VRemoteUploadAndDownload |
Tehnologija kategorija
-
ASP.NET 2.0
-
ASP.NET 3.5
-
ASP.NET 4.0
Reference
Dodatne informacije o WebClient klase posjetite sljedeće web-mjesto Microsoft Developer (MSDN):
Opće informacije o klase WebClientDodatne informacije o UploadData metoda posjetite sljedeće web-mjestu MSDN:
Opće informacije o metodu UploadDataDodatne informacije o DonwloadData metoda posjetite sljedeće web-mjestu MSDN:
Opće informacije o metodu DonwloadDataDodatne informacije o FtpWebRequest metoda posjetite sljedeće web-mjestu MSDN:
Opće informacije o metodu FtpWebRequestDodatne informacije o tome kako prenijeti datoteke s FTP, posjetite sljedeće web-mjestu MSDN:
Više informacija
Što je sve-u-jednom kod Framework?
Sve-u-jednom kod Framework prikazuje većina Microsoft razvojnih tehnika pomoću uzoraka koda u različitim jezicima programiranje. Svaki primjer pažljivo je odabrana, sastoji i dokumentirani Pokaži jedan uobičajeni scenarij šifru. Dodatne informacije o sve-u-jednom kod Framework, posjetite sljedeće Microsoftovo web-mjesto:
Kako pronaći više uzoraka sve-u-jednom kod Framework
Da biste pronašli više uzoraka sve-u-jednom Framework kod pretraživanja za "kbcodefx" s povezane ključne riječi na Microsoft podržava Web-mjesta. Ili, posjetite sljedeće Microsoftovo web-mjesto:
Sve-u-jednom kod Framework uzoraka
Rapid objavljivanje Izjava o odricanju odgovornosti
Microsoft corporation i/ili njegovi dobavljači odgovaraće provjerite nikakva jamstva o prikladnosti, pouzdanost ili točnost informacija i povezane grafike sadržavao spominju u ovom dokumentu. Takve informacije i povezane grafike su daje "kakav je" bez jamstava. Microsoft i/ili njegovi dobavljači odgovaraće Ovime se disclaim svih JAMSTAVA i uvjete s obzirom na ove informacije i povezane grafike, uključujući i sve implicitna jamstva i uvjete utrživosti, prikladnosti za određenu svrhu, Isključujemo trud, naslov i ne-povrede prava. Posebno prihvaćate da nijedan događaj bit Microsoft i/ili njegovi dobavljači će je obavezan za sve direktne, indirektne, KAZNENE, slučajne, posebne, posljedične štete ili štete neće uključujući, bez ograničenja, štete gubitak korištenje podataka ili dobit proizašle iz odsutnosti ili na bilo koji način povezan s korištenje ili Nemogućnost korištenja informacija i povezane grafike sadržavao spominju u ovom dokumentu, bez obzira na temelju ugovora, povreda, objektivne odgovornosti, uže odgovornosti ili drukčije, čak i ako je Microsoft ili bilo koji od njegovih dobavljača Svakako mogućnost štete.