
Server.MapPath("~/MyFiles/"), כי לא ידוע איפה האתר יושב על השרת. צריך להוסיף סלאש בין התיקייה לשם הקובץ.Guid.NewGuid().ToString() ומצמידים לו את הסיומת המקורית. הסיומת נלקחת מהמיקום של הנקודה האחרונה בשם הקובץ, בעזרת LastIndexOf ו-Substring.DataBinder.Eval או עם Container.DataItem.הטקסט המלא של הדקות הראשונות בהרצאה «Controls - פקדים נפוצים - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אוקיי, הרכיב הבא שלנו הוא רכיב שנקרא File Upload. File Upload זה רכיב שמסוגל לאפשר למשתמש לבחור קובץ. בואו נריץ, נגיע ל-File Upload, ונראה שיש לי פה לחצן Browse, ואני מסוגל לבחור איזה קובץ שאני רוצה במחשב של הלקוח.
בחרתי קובץ, ביצעתי Open, והקובץ רק מוצג לי כאן בתיבה הזאת, בתיבת הטקסט שלידו. הרכיב הזה גם מאפשר לי לקרוא את הקובץ הזה בצד השרת, ואפילו כמובן גם לשמור אותו בצד השרת.
בעזרת הרכיב הזה אנחנו יכולים להעלות קבצים מצד הלקוח לצד השרת כמו תמונות וכולי. אוקיי, בואו נראה איך אני לוקח את הקובץ ושומר אותו בצד של השרת. מה שנעשה זה נגדיר לידו איזשהו לחצן לצורך שמירת התמונה.
נגיע לדיזיין ונלחץ דאבל קליק על הלחצן בכדי להגיע לקוד ה-C-Sharp שלו שמתבצע בצד של השרת. בואו שוב פעם נסתכל איך נקרא רכיב ה-file-upload.
אז יש לו ID, נשאיר את ה-ID הזה כדפולט כרגע, למרות שבמציאות הייתי נותן לו איזשהו שם משמעותי. נעתיק את ה-ID, קופי.
בעזרתו אני יכול להגיע בצד השרת לרכיב עצמו. נחזור ל-c-sharp ואני רואה שיש לי כאן גישה לרכיב. יש לי פונקציה שנקראת save as. פונקציה, ואת אומרת לי דבר כזה: תן לי שם של קובץ כמובן עם נתיב מלא, ואני אשמור לך את הקובץ שהלקוח בחר.
בגלל שהקוד הזה, כשאנחנו רואים פה ב-C-Sharp רץ בצד השרת, אז השמירה של הקובץ תתבצע בצד השרת. אז בואו נגדיר בשרת שלנו תיקייה חדשה שנקראת MyFiles, ואני רוצה בתוכה לשמור את הקובץ שהלקוח בחר.
איך אנחנו עושים את זה? בואו נגדיר כאן String, שזה מידע טקסטואלי, משתנה שמכיל לי מידע טקסטואלי, שנקרא Path.
and file name בשביל להגיע לנתיב של my files אני צריך לדעת איפה התיקייה הזאתי my files בדיוק נמצאת במחשב השרת הבעיה היא שאני לא יודע איפה האתר שלי בכלל נמצא במחשב השרת מפני שכאשר אני מעלה את האתר שלי למחשב השרת כמו שראינו בסרטוט הזה אז הקבצים שלי והתיקייה של האתר נמצאים איפשהו במחשב השרת שאין לי שום אפשרות לדעת איפה זה נמצא מפני שמחשב השרת לרוב לא שלי
ואני מעלה את זה לשרת ציבורי ששמים לי אותה באיזושהי תיקייה. איך אני יודע בדיוק איפה הדבר הזה יושב? אז ישנה פקודה ב-sp.net, או יותר נכון פונקציה, שנקראת mapPath.
פונקציה אבותי אומרת לי תן לי תיקייה בתוך האתר שלך ואני אחזיר לך את הנתיב המלא לתיקייה הזאת כולל התיקייה עצמה. כל מה שאני צריך לתת ל-MapPath זה את השם של התיקייה שלי MyFiles ו-MapPath תחזיר לי את הנתיב המלא לתיקייה הזאת, כולל שם התיקייה.
בשביל לשמור קובץ אבל אני צריך גם את השם של הקובץ, ולכן נשרשר אותה עם file-upload1.file name. עכשיו יש לי את הנתיב המלא אליו אני רוצה לשמור, ביחד עם שם הקובץ שהמשתמש בחר, ואת זה אני שומר דרך לרכיב הפייל Upload שמחזיק לי את הקובץ עצמו.
בואו נבדוק איך זה עובד. אז אני מריץ את האתר, נגלול למטה לרכיב, קודם כל נבחר קובץ, נבחר את גרינסטון, נבצע Open, ואז נלחץ על לחצן Save.
קודם כל אני רואה שמשהו בצד השערה תתבצע ודף חזר. בסדר, בואו נסגור את הדפדפן, נחזור, נבחר את התיקייה ונלחץ על אייקון Refresh. אני רואה שיש לי את הפייל גרינסטון נמצא כאן.
יש לנו פה איזושהי טעות קלה שכבר אנחנו נתקן אותה. מה שקרה זה שהוא חשב שמי פיילס ביחד עם השם גרינסטון זה השם של הקובץ, והסיבה לזה היא כי היינו צריכים להוסיף ביניהם סלאש בכדי לומר למערכת זה הנתיב ואז משורשר אליו שם של קובץ.
בואו נמחק את הקובץ הזה ונשמור ונבצע שוב פעם את אותה הרצה. נבחר את אותו הקובץ, סייב, נסגור את הדפדפן, נבחר את התיקייה ונרפרש.
ועכשיו באמת השם greenstone.bmp, שזה הקובץ שבחרתי, הגיע לצד השרת לתוך התיקייה my files. כך המשתמש יכול להעלות תמונות, קורות חיים, קבצים שונים, כל מה שהוא רוצה.
בואו נראה עוד משהו מעניין בקשר לזה. ישנה בעיה מאוד ידועה בעולם ה-Web שניתנת לפתרון בקלות, והיא אומרת דבר כזה: יכול להיות שלקוח אחד בוחר לי שם של קובץ והעליתי אותו לתיקייה שלי ולקוח אחר איפשהו בעולם בחר אצלו במחשב שם של קובץ שהוא בדיוק אותו השם שכבר לקוח הראשון בחר כמובן שאני לא יכול להעלות שני קבצים בעלי אותו שם
לאותה תיקייה וזה בעצם ייצור לי בעיה מפני שלקוחות יכולים להעלות איזה קבצים שהם רוצים אין לי שליטה על השמות שלהם אבל מה שיש לי שליטה ומה השם שאני יכול להחליט עבור הקובץ הזה.
ומה שאני רוצה לעשות, אני רוצה לתת שם ייחודי עבור הקובץ שאני מעלה. איך אני יכול לעשות את זה? ישנו רכיב שנקרא גוויד.
גוויד זה קיצור של Global Unique Identifier. בואו ניצור אובייקט ממנו, נגיע לתיקייה ובתוכה אנחנו לא ניתן את השם שהמשתמש, השם הקובץ המקורי של המשתמש, אלא נלך לגלובל יוניק איידנטיפייר ונגיד לו 2 סטרינג.
כלומר, תהפוך לי את הערך שלך למחרוזת. פה האמת, אנחנו צריכים לעשות משהו שהוא טיפה שונה ליתר דיוק, good.new good. עכשיו אני רוצה לשמור את הסיומת.
הסיומת הקודמת שבחרתי הייתה bmp. בואו נסתכל מה אמרתי פה כרגע. אמרתי שהנתיב ושם הקובץ החדש שאני רוצה זה