PENDAHULUAN
Artikel ini menjelaskan semua-dalam-satu kerangka sampel yang tersedia untuk diunduh. Sampel kode ini menunjukkan cara meng-upload dan mengunduh berkas dari server jauh atau lokal ASP.net. Anda dapat mengunduh paket contoh dari ikon unduhan berikut. Versi bahasa C# maupun Visual Basic .NET paket sampel tersedia.
Sampel kode ini menunjukkan cara meng-upload dan mengunduh berkas dari server yang bukan dalam lingkup domain permintaan pengguna. Fungsionalitas tersedia untuk mentransfer berkas dengan protokol HTTP dan FTP. Selain itu, sampel kode ini menggunakan Uniform Resource Identifier (URI) untuk mengidentifikasi lokasi berkas di server. Kelas utama yang digunakan dalam sampel kode ini adalah kelas WebClient dan WebRequest kelas.Tingkat kesulitan
Informasi unduhan
Untuk mengunduh sampel kode ini, klik salah satu tautan berikut ini:
Ikhtisar teknis
Memang cukup mudah meng-upload dan mengunduh berkas dari server jauh ASP.net. Perpustakaan kelas .NET Framework menyediakan beberapa objek ringan permintaan. Kelas WebClient adalah kelas tingkat tinggi yang mempermudah interaksi server. WebRequest objek yang digunakan oleh kelas WebClient untuk membuat permintaan. Kelas HttpWebRequest dan FtpWebRequest adalah protokol khusus penerapan abstrak WebRequest kelas. HttpWebRequest menerapkan metode GET dan posting protokol HTTP meng-upload dan men-download file. FtpWebRequest menerapkan metode STOR dan RETR protokol FTP untuk meng-upload dan men-download file.
Sampel kode ini menggunakan metode UploadData dan DownloadData WebClient class untuk mentransfer data ke dan dari server jauh URI. Metode UploadData digunakan dengan metode masukan protokol HTTP dan "aplikasi/x-www-form-urlencoded" jenis MIME. Metode DownloadData digunakan dengan objek FileStream untuk menyimpan aliran data masuk dan menulis byte array untuk berkas lokal.Ikhtisar sampel
Dalam kode contoh ini, Anda akan menemukan berkas RemoteFileForm.aspx yang menjelaskan tentang cara menggunakan dua kelas baru berikut ini:
-
RemoteUpload
-
RemoteDownload
Kelas RemoteUpload
Kelas RemoteUpload memiliki dua kelas anak-anak. Kelas ini adalah HttpRemoteUpload dan FtpRemoteUpload. Kelas kedua menggunakan konstruktor RemoteUpload . Kelas RemoteUpload memerlukan byte array berkas data dan server URI. Anda juga dapat menentukan nama untuk menggunakan file upload. Kelas FtpRemoteUpload menggunakan FtpWebRequest langsung (Alih-alih menggunakan kelas WebClient tingkat yang lebih tinggi) untuk menangani persyaratan khusus protokol FTP.
Lihat definisi kelas berikut untuk informasi lebih lanjut tentang kelas 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); } } } Dalam RemoteFileForm.cs file, ketika Anda mengklik tombol Upload contoh objek RemoteUpload dibuat. Melewati server URI dan jalur lokal fisik berkas sebagai parameter untuk membuat objek. Catatan Jika Anda tidak menentukan nama berkas yang digunakan untuk menyimpan berkas di server, sistem secara otomatis akan membuat nama berkas menurut tanggal dan waktu di server. Tanggal dan waktu yang akurat kepada milidetik. Setelah selesai UploadData metode, hasil yang ditampilkan pada halaman saat ini.Kelas RemoteDownload
Kelas RemoteDownload juga memiliki dua kelas anak-anak. Kelas ini adalah HttpRemoteDownload dan FtpRemoteDownload. Kelas RemoteDownload memerlukan URI sumber daya dan direktori fisik lokal. Kelas RemoteDownload memeriksa untuk memastikan bahwa sumber daya URI yang ada sebelum download dimulai. Kelas mengambil aliran yang berisi data respons dari server, dan kemudian menulis byte array untuk FileStream. Kelas FtpRemoteDownload menggunakan FtpWebRequest langsung (Alih-alih menggunakan kelas WebClient tingkat yang lebih tinggi) untuk menangani persyaratan khusus protokol FTP.
Lihat definisi kelas berikut untuk informasi lebih lanjut tentang kelas 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); } } } Catatan Untuk informasi selengkapnya tentang cara membuat dan menyebarkan aplikasi contoh, baca berkas Readme.txt yang disertakan dalam paket unduhan.Bahasa
Sampel kode ini tersedia dalam bahasa pemrograman berikut ini:
Bahasa |
Nama proyek |
---|---|
Visual C# |
CSRemoteUploadAndDownload |
Visual Basic.NET |
VRemoteUploadAndDownload |
Teknologi Kategori
-
ASP.NET 2.0
-
ASP.NET 3.5
-
ASP.NET 4.0
Referensi
Untuk informasi lebih lanjut tentang kelas WebClient , kunjungi situs web Pengembang Microsoft (MSDN) berikut:
Informasi umum tentang kelas WebClientUntuk informasi selengkapnya tentang metode UploadData , kunjungi website MSDN berikut:
Informasi umum tentang metode UploadDataUntuk informasi selengkapnya tentang metode DonwloadData , kunjungi website MSDN berikut:
Informasi umum tentang metode DonwloadDataUntuk informasi selengkapnya tentang metode FtpWebRequest , kunjungi website MSDN berikut:
Informasi umum tentang metode FtpWebRequestUntuk informasi selengkapnya tentang cara meng-upload file dengan FTP, kunjungi website MSDN berikut:
Informasi lebih lanjut
Apa itu semua-dalam-satu kode Framework?
Semua-dalam-satu kode Framework menunjukkan sebagian besar teknik pengembangan Microsoft dengan menggunakan kode contoh dalam bahasa pemrograman yang berbeda. Setiap contoh dengan hati-hati dipilih, dibuat, dan didokumentasikan untuk menampilkan satu umum kode skenario. Untuk informasi selengkapnya tentang semua-dalam-satu kode Framework, kunjungi situs web Microsoft berikut:
Cara menemukan semua-dalam-satu kerangka kode sampel
Untuk mencari semua-dalam-satu kerangka kode sampel, Cari "kbcodefx" bersama-sama dengan kata kunci yang terkait di Microsoft dukungan situs Web. Atau, kunjungi situs web Microsoft berikut ini:
Semua-dalam-satu kerangka kode sampel
Sanggahan penerbitan cepat
Microsoft corporation dan/atau para PENYUPLAINYA tidak membuat pernyataan tentang kesesuaian, keandalan, atau akurasi informasi dan grafis terkait yang terkandung di dalamnya. Semua informasi dan grafis terkait disediakan "apa adanya" tanpa jaminan dalam bentuk apa pun. Microsoft dan/atau para PENYUPLAINYA dengan ini menyanggah semua jaminan dan kondisi berkenaan dengan informasi ini dan terkait grafis, termasuk semua garansi dan kondisi tersirat dapat diperjualbelikan, kesesuaian untuk tujuan tertentu, properti upaya, judul dan non-pelanggaran. Anda khususnya setuju bahwa dalam acara akan Microsoft dan/atau pemasoknya tidak bertanggung jawab untuk setiap langsung, tidak langsung, hukuman, insidental, khusus, konsekuensial, atau kerusakan apa pun termasuk, tanpa batasan, kerusakan hilangnya penggunaan, data atau keuntungan, timbul dari atau dengan cara apa pun yang berhubungan dengan penggunaan atau ketidakmampuan untuk menggunakan informasi dan grafis terkait yang terkandung di dalamnya, baik berdasarkan pada kontrak, kesalahan, negligence tanggung jawab ketat atau tersurat, bahkan jika Microsoft atau pemasoknya telah disarankan kemungkinan kerusakan.