יום שבת, 18 בדצמבר 2010

File Upload With Flex And IIS 7

העברת קבצים ב Flash זה עניין מסובך שמצריך הכנות ובדיקות, התהליך מורכב מ 3 שלבים , השלב הראשון הוא ההגדרות של המערכת: IIS,הרשאות כתיבה בספריות ופתיחת פורטים השלב הבא הוא פיתוח האתר שאיתו ה Flex הולך לדבר, ושלב אחרון הוא פיתוח מנגנון העלאה ב Flex.

הגדרות מערכת
תחילה יש להגדיר את גודל המידע שיכול לעבור ואח"כ את גודל כל דרישה בשביל אותו מידע , ב IIS7  גודל המידע ה Default הוא  30 מגה ,אבל ניתן לדרוס את הפרמטר הזה בקובץ ApplicationHost שהוא בעצם קובץ XML שמכיל את הפרמטרים של ה IIS, בזמן טעינת האתר ה IIS טוען את הקובץ ולאחר מכן הוא טוען את ה Web.Config שמכילים את הפרמטרים של האתר העצמו.

ApplicationHost.config
תחילה נערוך את קובץ
C:\Windows\System32\inetsrv\config\applicationHost.config

נחפש את הבלוק שמגדיר את האתר שלנו ב ApplicationHost  (חשוב מאוד לגבות את הקובץ!) :

<location path="Your Website Name">
        <system.webserver>
           <security>
                        <requestfiltering>
                        <requestlimits maxallowedcontentlength="104857600">
                        </requestfiltering>
          </security>
          </system.webserver>
</location>
 
ברוב המצבים תגית האתר כבר מוגדרת ויש לוודא שקיימת גם תגית ה Security ואם לא להוסיף אותה.
ניתן לעשות את התהליך גם ב AppCmd שהיא אפליקצית Console שמגיע עם ה IIS 7 וניתן בעזרת לערוך את קובץ ה ApplicationHost ללא צורך לפתוח אותו , ובעצם למנוע תקלות בעקבות כתיבה לא נכונה.
 
C:\Windows\System32\inetsrv>appcmd set config "Your Website Name" -section:requestFiltering -requestLimits.maxAllowedContentLength:104857600 -commitpath:apphost
 
maxAllowedContentLength:104857600 מגדיר גודל של המידע שניתן להעביר, במקרה שלנו הגדלנו אותו ל 100 MB.
 
Web.config
נוסיף את הבלוק הבא בתוך התגית <system.web>(חשוב מאוד לגבות את הקובץ!) :
<httpRuntime executionTimeout="90" maxRequestLength="4096" />

maxRequestLength=2097151 הגדרנו את גודל של בקשה, בעצם 2 מגה.

Asp.net

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

יש לנו 2 קבצי Asp.net באתר ,הראשון הוא ה Upload Handler שתוכנת ה Flex שלנו מתחברת על מנת לשלוח את הקובץ לשרת, ודף נוסף שמציג לנו את ה Uploader עצמו.

upload_handler.aspx.cs

פונקציה אחת שבעצם שומרת לנו את הקבצים שאנו שולחים לספריית האחסון.

 protected void Page_Load(object sender, EventArgs e)
{
       string fileName = System.IO.Path.GetFileName(Request.Files[i].FileName);
       Request.Files[i].SaveAs(Server.MapPath("~/UploadedFiles/") + fileName);
upload_manager.aspx
דף שמכיל לנו את אובייקט ה Flesh  שמעלה קבצים.
חשוב מאוד להגדיר Cross Domain Policy , שנוכל להעלות מכל שרת, או מרשתות שמורשות לכך.

Flex

אפליקצית ה Flex מורכבת ממספר פונקציות:
פונקצית Start
זאת הפוקציה שמתחילה את התוכנה ומוסיפה מאיזינים (listeners) עבור אירועים בכפתורים.

פונקצית eventRespnse
פותחת לנו את ה File Dialog שנוכל לבחור קבצים.

פונקצית selectResponse
מחזירה לנו את כל הקבצים שנבחרו להעלאה.

פונקצית UploadFiles
הפונקציה ששולחת את הקובץ לשרת, תחילה היא קוראת לקובץ upload_handler ואח"כ מתחילה בשליחת הקובץ.

פונקצית uploadComplete
כשהעלאת הקובץ מסתיימת, עולה לנו אירוע שאומר שאפשר לשלוח את הקובץ הבא.

Gui
הממשק מורכב מ - Button,Labels,Progress Bar


סרטון הדגמה:


קוד להורדה:

בהצלחה...

אין תגובות:

הוסף רשומת תגובה