מבוא
מאמר זה מתאר של דוגמת framework All-In-One הזמין להורדה. דוגמת קוד זו מדגימה כיצד להעלות ולהוריד קבצים משרת מרוחק או מקומי ב- ASP.NET. באפשרותך להוריד את החבילות לדוגמה מתוך הסמלים הבאים ההורדה. הן c# ו- Visual Basic .NET גירסאות השפה של החבילה לדוגמה זמינים.
דוגמת קוד זו מדגימה כיצד להעלות ולהוריד קבצים משרת אינו בטווח של תחום בקשת המשתמש. מספק פונקציונליות עבור העברת קבצים באמצעות הפרוטוקולים HTTP ו- FTP. כמו כן, דוגמת קוד זה משתמש מזהי משאבים אחיד (Uri) כדי לזהות את מיקומם של קבצים בשרת. מחלקות מפתח המשמש בדוגמת קוד זו הם המחלקה WebClient המחלקה WebRequest .רמת קושי
מידע אודות הורדות
כדי להוריד את דוגמת קוד זה, לחץ על אחד מהקישורים הבאים:
סקירה טכנית
קל למדי להעלות ולהוריד קבצים משרת מרוחק ב- ASP.NET. ספריית המחלקות של .NET Framework מספק אובייקטים אחדים הבקשה קל משקל. המחלקה WebClient היא מחלקה ברמה גבוהה המקלה אינטראקציות של שרת. אובייקטים WebRequest נעשה שימוש על-ידי המחלקה WebClient כדי להפוך בקשות. מחלקות HttpWebRequest ו- FtpWebRequest הם יישומי ספציפית לפרוטוקול של תקציר מחלקה WebRequest . HttpWebRequest מיישם את שיטות GET ו- POST של פרוטוקול HTTP כדי להעלות ולהוריד קבצים. FtpWebRequest מיישם את תצוגת ושיטות זמ בפרוטוקול FTP כדי להעלות ולהוריד קבצים.
דוגמת קוד זה משתמש בשיטות UploadData ו- DownloadData של המחלקה WebClient להעברת נתונים מ- URI של שרת מרוחק. השיטה UploadData נעשה שימוש בשיטת PUT של פרוטוקול HTTP והקלד "יישום/x-www-טופס-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 |
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:
מידע נוסף
מהי מסגרת הקוד All-In-One?
מסגרת הקוד All-In-One מציגה את רוב טכניקות פיתוח של Microsoft באמצעות דוגמאות קוד בשפות תכנות שונות. כל דוגמה בקפידה נבחרה, המורכב, והיא מתועדים כדי להציג תרחיש נפוץ אחד של קוד. לקבלת מידע נוסף אודות מסגרת הקוד All-In-One, בקר באתר האינטרנט הבא של Microsoft:
כיצד למצוא דוגמאות נוספות של מסגרת הקוד All-In-One
כדי למצוא דוגמאות נוספות של מסגרת הקוד All-In-One, חפש "kbcodefx" יחד עם מילות מפתח קשורות ב- Microsoft תומכת באתר האינטרנט. לחלופין, בקר באתר האינטרנט הבא של Microsoft:
דוגמאות קוד Framework All-In-One
כתב ויתור פרסום מהיר
Microsoft corporation ו/או ספקיה להפוך ללא ייצוגים אודות ההתאמה, אמינות או דיוק של מידע וגרפיקה קשורים הכלול כאן. כל מידע וגרפיקה קרובים כאלה ניתנים "כמות שהוא" ללא אחריות מסוג כלשהו. Microsoft ו/או ספקיה בזאת מסירים מעצמם כל אחריות ותנאים ביחס מידע זה ואת הקשורות גרפיקה, לרבות כל אחריות משתמעת ותנאים של סחירות, התאמה למטרה מסוימת, למאמץ מאמץ, כותרת והפרה. אתה מסכים במפורש כי באירוע לא יישאו Microsoft ו/או ספקיה בחבות לגבי כל ישירים, עקיפים, עונשי, מקריים, מיוחד, תוצאתי או כל נזק שהוא כולל, ללא הגבלה, נזקים עבור מאובדן שימוש, נתונים או רווחים, הנובעים או בכל דרך מחובר עם השימוש או אי-יכולת להשתמש מידע וגרפיקה קשורים הכלול כאן, בין אם בהתבסס על חוזה, עוולה, רשלנות, אחריות או אחרת, גם אם Microsoft או ספקיה עבר מידע אודות האפשרות להתרחשות נזקים.