העלאת קבצים לשרת באמצעות asp.net

‏ • 27 בפברואר, 2004

לשם מה אני צריך העלאת קבצים ?

העלאת קבצים לשרת נעשית מתוך האתר עצמו, לכן אין צורך ב- FTP, פתיחת חשבונות FTP וכדומה.
האפשרות יכולה להיות מאוד שימושית בלוחות הניהול של האתר, דבר המאפשר להעלות קבצים, תמונות ועוד מתוך האתר עצמו. בנוסף, ישנה אפשרות לבנות מזוודה בה משתמשים יוכלו לאכסן קבצים שונים או לאפשר למשתמשי האתר אפשרות להעלות חתימה לפורומים וכדומה.

איך זה עובד ?

אנו צריכים טופס html שדרכו נבחר איזה קובץ להעלות ופונקציית asp.net שתעלה את הקובץ ממחשב הלקוח למחשב השרת.

קוד טופס ה-html












1
2
3
4
5
6
7
8
9
10
11  








<html>
    <head>
         <title>Upload</title>
    </head>
    <body>
         <form method=“post” action=“upload.aspx” enctype=“multipart/form-data”>
              <input type=“file” id=“file” name=“file”><br>
              <input type=“submit” value=“submit”>
         </form>
    </body>
</html>


הטופס מורכב משדה מסוג קובץ המאפשר למשתמש לבחור את הקובץ שברצונו להעלות ומלחצן השולח את המידע מהטופס לקובץ upload.aspx

קוד הפונקצייה Page_Load בקובץ upload.aspx












1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21  








if(Request.ContentLength != 0)
{
      int Size = Request.Files[0].ContentLength / 1024;
      if(Size <= 512)
      {
           string LocalFile = Request.Files[0].FileName;
           int LastIndex = LocalFile.LastIndexOf(@“\”) + 1;
           string File = LocalFile.Substring(LastIndex, LocalFile.Length LastIndex);
           string Path = @“E:\Uploads\”+ File;
         Request.Files[0].SaveAs(Path);
         Response.Write(@“The file was saved: “+ Path);
    }
    else
    {
         Response.Write(“The file is too big !”);
    }
}
else
{
      Response.Write(“Unknown Error !”);
}




  • שורה 1 – מתבצעת בדיקה האם נשלח איזשהו מידע מטופס לקובץ או שלא.
  • שורה 3 – קבלת גודל הקובץ בבתים וחילוקו ל- 1024 על מנת לקבל את הגודל ב- KB.
  • שורה 4 – בדיקה האם גודל הקובץ אינו גדול מ- 512kb.
  • שורה 6 – קבלת המיקום של הקובץ במחשב המשתמש (לדוגמא: C:TempHello.txt).
  • שורה 7 – קבלת האינדקס של התו הראשון של שם הקובץ (בדוגמא שלנו, 9).
  • שורה 8 – קבלת שם הקובץ והסיומת שלו, ללא כול המיקום (בדוגמא שלנו נקבל Hello.txt).
  • שורה 9 – יצירת משתנה שיכיל את המיקום החדש של הקובץ במחשב השרת.
  • שורה 10 – שמירת הקובץ במחשב השרת בכתובת שבחרנו בשורה 9.
  • שורה 11 – הדפסת המיקום החדש של הקובץ במחשב השרת.
  • שורה 15 – במידה וגודל הקובץ שהמשתמש מנסה להעלות גדול יותר מהגודל המקסימלי שהגדרנו בשורה 4, נדפיס הודעת שגיאה.
  • שורה 20 – במידה והמשתמש נכנס לקובץ הזה ללא שליחת שום נתונים מהטופס, נדפיס הודעת שגיאה.

הערה: אם אין ברצונכם להגביל את המשתמש על גודל הקובץ המועלה, יש למחוק את שורות 3, 4, 5, 12, 13, 14, 15, 16.

בעיות נפוצות

ניקח דוגמא פשוטה כדי להראות את הבעיה.
ננסה להעלות את הקובץ Hello.txt דרך הטופס שבנינו, אך למראה הפלא במקום לקבל את ההודעה שהקובץ הועלה בהצלחה, אנחנו מקבלים את הודעת השגיאה הבאה:


Access to the path “E:\Uploads\Hello.txt” is denied

במקום ישר לקפוץ ולשלוח לי אימיילים שהמאמר שלי לא נכון, בואו ננסה להבין מה הבעיה.
התוכנית עבדה טוב אבל נכשלה בשורה 10, במקום שבו אמורה היתה להתבצע השמירה עצמה עם השגיאה שאין לנו גישה לתקייה הנוכחית.
כדי לתקן את השגיאה, אנו צריכים בשרת לאפשר את הרשאת הכתיבה לתקייה.



עכשיו, כאשר אנו ננסה להעלות קובץ, הכול יעבוד מצויין !!!

בהצלחה!

תגיות: , ,

תגובות בפייסבוק