Behrouz_Rad
پنج شنبه 26 فروردین 1389, 23:35 عصر
Demo ی این کامپوننت رو در آدرس ذیل قرار دادم:
http://bau.codepro.ir (http://bau.codepro.ir/)
AJAX، دنیای وب را متحول کرده است. هر روز ابزارها و قابلیت های بیشتری بر مبنای آن معرفی و موجب هر چه کمتر شدن فاصله ی میان برنامه های Web-Based و Desktop-Based می شوند.
متاسفانه AJAX به گونه ای طراحی شده است که فقط امکان ارسال داده های متنی را دارد و نمی توان با آن داده های باینری را منتقل نمود. این نقطه ضعف موجب شده است تا امکان آپلود فایل ها بدون PostBack شدن صفحه میسر نباشد. حتی کنترل AsynsFileUpload در مجموعه ی AJAX Control Toolkit نیز با ایجاد یک Frame اقدام به ارسال فایل به Server می کند.
موتور Gecko نسخه ی 1.9.1 که مرورگر Firefox در نسخه ی 3.5 خودش از آن استفاده می کند، قابلیتی را به کامپوننت XMLHttpRequest که هسته ی اصلی AJAX را تشکیل می دهد اضافه کرد که به موجب آن امکان ارسال داده های باینری نیز فراهم شده است. این قابلیت موجب شد تا به فکر ایجاد کامپوننتی برای ASP.NET بیفتم که امکان آپلود فایل ها را بدون نیاز به PostBack صفحه می دهد. ضمن اینکه میزان درصد آپلود، حجم کل فایل و میزان حجمی که تا زمان جاری آپلود شده است نیز نمایش داده می شود. در این مقاله به طور کامل با این کامپوننت، نحوه ی استفاده و قابلیت های متنوع آن آشنا خواهید شد.
قبل از شروع، بهتر است به دو سوالی که احتمالاً در ذهنتان ایجاد شده است پاسخ دهم.
سوال: فقط Firefox؟
پاسخ: هر مرورگری که از موتور Gecko نسخه ی 1.9.1 استفاده می کند، می تواند از این کامپوننت استفاده کند. برای دیدن لیستی از این مرورگرها به لینک ذیل مراجعه بفرمایید:
http://en.wikipedia.org/wiki/Comparison_of_web_browsers#General_information
سوال: مرورگر Internet Explorer در حال حاضر بیشترین سهم بازار مرورگرها را میان کاربران در اختیار دارد. برای این مرورگر چه فکری شده است؟
پاسخ: متاسفانه قابلیت جدید اضافه شده به کامپوننت XMLHttpRequest در مرورگر Internet Explorer پشتیبانی نمی شود. اما برای این کامپوننت، یک Property با نام IsSupported ایجاد کردم که می توان با بررسی آن، متوجه شد که آیا این کامپوننت توسط مرورگر کاربر پشتیبانی می شود یا خیر. از آنجا که محبوب ترین مرورگری که از موتور Gecko استفاده می کند مرورگر Firefox است، در صورتی که کاربر از مرورگری به جز Firefox 3.5 و بالاتر استفاده می کرد، می توان به شکل معمول اجازه ی آپلود به کاربر را داد: بدین شکل که یک کامپوننت FileUpload و یک Button را در یک Panel با خاصیت Visible در ابتدا برابر با False قرار دهید و در صورتی که مقدار برگشتی خصیصه ی IsSupported برابر با False بود، Panel را به کاربر نشان دهید.
Source این کامپوننت رو بعد از تست نهایی قرار میدم.
با این مقدمه به سراغ این کامپوننت می رویم.
ابتدا نمایی از Demo ی این کامپوننت را ببینیم:
http://bau.codepro.ir/article-images/bau-01.gif
نام این کنترل را BAU گذاشتم. BAU مخفف Behoo Ajax Uploader است.
کنترل BAU در Visual Studio 2008 و با C# نوشته شده و از دو قسمت تشکیل شده است. BAU Handler و Control BAU.
ابتدا در مورد BAU Handler توضیح میدم. BAU Handler یک Http Handler است.
1) فایل BAUHandler.dll رو با Browse از طریق انتخاب گزینه ی Add Reference از منوی Project به پروژه اضافه کنید. (اگر از حالت Web Site برای ایجاد پروژه استفاده کرده اید، گزینه ی Add Reference در منوی Website وجود دارد)
2) فایل Web.Config را باز کرده و سکشن <httpHandlers> را پیدا کنید. قبل از تگ پایان اون، عبارت ذیل رو برای رجیستر کردن Http Handler در پروژه اضافه کنید:
<add verb="POST" path="*.aspx" type="BAUHandler.UploadHandler, BAUHandler"/>
3) BAU Handler حتماً نیاز به 3 مقدار دارد. این مقادیر از فایل Web.Config خوانده میشن و در تگ appSettings قرار می گیرن:
<appSettings>
<add key="BAU-SaveFolder" value="Uploads"/>
<add key="BAU-MaxFileSize" value="1024"/>
<add key="BAU-GenerateUniqueFileName" value="false"/>
</appSettings>
پارامتر BAU-SaveFolder، مسیری رو مشخص می کنه که فایل هایی که آپلود میشن در اون قرار می گیرند. این مسیر نسبت به ریشه ی اصلی سایت سنجیده میشه. در مثال فوق مشخص شده است که فایل های آپلودی باید در پوشه ی Uploads که در ریشه ی اصلی سایت هست قرار بگیرن.
پارامتر BAU-MaxFileSize، حداکثر میزان مجاز اندازه ی فایل آپلودی توسط کاربر رو تعیین می کنه. این مقدار بر حسب کیلو بایت هست. در مثال فوق، حداکثر میزان مجاز اندازه ی فایل، برابر با 1 مگابایت تنظیم شده است.
نکته: در ASP.NET به طور پیش فرض، حجم Request ارسالی به Server برابر با 4096 کیلو بایت است. در صورتی که مقدار پارامتر BAU-MaxFileSize را به مقداری بیش از 4096 تنظیم می کنید، باید مقدار خصیصه ی maxRequestLength سکشن httpRuntime رو که از زیر سکشن های تگ <system.web> هست به همان میزان تعیین کنید.
پارامتر BAU-GenerateUniqueFileName تعیین می کند که آیا نام فایل آپلودی باید تغییر یافته و برابر با یک عبارت GUID تنظیم شود یا خیر. معمولاً این مقدار رو باید به True تنظیم کنید تا از Overwrite شدن فایل آپلودی بر روی فایلی با نام مشابه جلوگیری کنید.
اگر یکی از سه پارامتر فوق در فایل Web.Config وجود نداشته باشند یا مقدار نامعتبری به اونها نسبت داده بشه، در زمان آپلود با خطا مواجه خواهید شد. البته برای این کامپوننت روتین کنترل خطای خوبی در سمت Client پیاده سازی کردم که در ادامه با اون آشنا خواهید شد.
کار ما با BAU Handler به اتمام رسیده است.
حال سراغ BAU Control می رویم. ظاهر کنترل BAU از یک Progress Bar و یک عبارت که میزان حجم کل فایل و مقدار آپلود شده تا زمان جاری را نمایش می دهد تشکیل شده است.
برای Progress Bar، از کامپوننتی استفاده کردم که با jQuery پیاده سازی شده است. بنابراین نیاز به jQuery دارید. آخرین نسخه ی jQuery در زمان نوشتن این مقاله، نسخه ی 1.4.2 آن است که در فایل ضمیمه موجود است. کامپوننت Progress Bar نیاز به فایل js خود با نام jquery.progressbar.min.js و پوشه ی images دارد. این پوشه در پوشه ی BAU-Test وجود دارد. پس فایل های jquery.progressbar.min.js و jquery-1.4.2.min.js را با استفاده از تگ src در تگ head صفحه قرار داده و پوشه ی images را نیز در کنار صفحه قرار دهید.
بر روی Toolbox راست کلیک و گزینه ی Choose Items را انتخاب کنید. فایل BAUControl.dll را از طریق Browse انتخاب و OK کنید. کنترل BAU که آیکون یک Progress Bar را دارد به Toolbox اضافه می شود. آن را Drag کنید و بر روی صفحه بیندازید. دایرکتیو Register به طور خودکار به بالای صفحه اضافه می شود. سینتکس تعریفی کامپوننت در حالت "پیش فرض" به شکل ذیل خواهد بود:
<cc1:AjaxUploader ID="AjaxUploader1" runat="server" ProgressColor="Red" ProgressTextFormat="Percentage">
</cc1:AjaxUploader>
در نهایت، سلسله مراتب فایل های پروژه به شکل ذیل خواهد بود:
http://bau.codepro.ir/article-images/bau-02.gif
خصیصه های کنترل BAU عبارت اند از:
ButtonName: مقدار دهی به این خصیصه اجباری است. نام دکمه ای را مشخص می کند که قصد دارید با کلیک بر روی آن، عملیات آپلود آغاز شود. این دکمه می تواند از نوع Button، ImageButton یا LinkButton باشد. اگر کنترلی غیر از این نوع کنترل ها را انتخاب کنید، برنامه این مورد را تشخیص داده و در زمان اجرا با خطا مواجه خواهید شد.
FileUploadName: مقدار دهی به این خصیصه اجباری است. نام کنترل FileUpload ای را مشخص می کند که کنترل BAU باید با آن ارتباط برقرار کند.
ProgressColor: مقدار دهی به این خصیصه اختیاری است. رنگ کنترل Progress Bar را تعیین می کند. مقدار این خصیصه یکی از مقادیر Red، Orange و Green یک Enum با نام ProgressColor است. (مقدار پیش فرض، Red است)
ProgressTextFormat: مقدار دهی به این خصیصه اختیاری است. نوع نمایش درصد مقدار آپلود شده را مشخص می کند و یکی از مقادیر Percentage یا Fraction یک Enum با نام ProgressTextFormat را می پذیرد. (مقدار پیش فرض، Percentage است)
IsSupported: مقدار True یا False را برگشت می دهد و فقط خواندنی است. مشخص می کند که کنترل BAU توسط مرورگر پشتیبانی می شود یا خیر.
OnCompletedFunction: مقدار دهی به این خصیصه اختیاری است. این خصیصه نام یک متد جاوا اسکریپت در سمت کلاینت را می پذیرد که این تابع پس از پایان عملیات آپلود فراخوانی می شود. به عنوان مثال می توانید در تابعی که به این خصیصه معرفی می کنید، با استفاده از دستور alert، اتمام موفقیت آمیز عملیات آپلود را به کاربر گزارش دهید. به عنوان مثال، تابعی که در Demo ی برنامه نوشتم به شکل ذیل هست:
function onCompleted() {
alert("File Uploaded");
}
OnErrorFunction: مقدار دهی به این خصیصه اختیاری است. این خصیصه نام یک تابع جاوا اسکریپت در سمت کلاینت را می پذیرد که این تابع در صورت وقوع خطا در زمان آپلود فراخوانی می شود. سینتکس این تابع به شکل ذیل است:
functionName(code)
پارامتر code یک کد HTTP است که Handler BAU در صورت وقوع خطا ارسال می کند. کدهای HTTP که ارسال می شوند و در پارامتر code قرار می گیرند عبارت اند از:
کد 400: در صورتی که درخواست ارسالی نامعتبر باشد و Header های لازم را به همراه نداشته باشد، کد 400 برگشت داده می شود.
کد 404: در صورتی که یکی از مقادیر مورد نیاز BAU Handler در فایل Web.Config وجود نداشته باشند یا مسیر تعیین شده برای ذخیره ی فایل ها بر روی سرور نامعتبر باشد، کد 404 برگشت داده می شود.
کد 413: در صورتی که میزان حجم فایل انتخاب شده توسط کاربر از میزان حجم مجاز بیشتر باشد، کد 413 برگشت داده می شود.
به عنوان مثال، تابعی که در Demo ی برنامه نوشتم به شکل ذیل هست:
function onError(code) {
switch (code) {
case 400:
alert("Bad Request");
break;
case 404:
alert("Resource Not Found");
break;
case 413:
alert("Request Entity Too Large");
break;
default:
}
}
چند نکته:
1) اعطای مجوز Write را به پوشه ای که فایل های آپلودی در آن قرار می گیرند فراموش نکنید.
2) از آنجا که در حالت local، اجرای برنامه سریع صورت می پذیرد، برای اینکه عملکرد این کامپوننت را بر روی سیستم خود مشاهده کنید، پلاگین Firefox Throttle را برای Firefox از لینک ذیل دانلود و نصب کنید:
https://addons.mozilla.org/en-US/firefox/addon/5917
پس از نصب این پلاگین، در نوار زیرین Firefox، تصویر ذیل را مشاهده خواهید نمود:
http://bau.codepro.ir/article-images/bau-03.gif
بر روی آن راست کلیک و گزینه ی Options را انتخاب کنید. فرمی همانند شکل ذیل را خواهید دید:
http://bau.codepro.ir/article-images/bau-04.gif
تیک گزینه ی Throttle upload را بزنید، گزینه ی Custom را از لیست روبروی آن انتخاب و مقدار را بر روی 5 تنظیم و OK کنید:
http://bau.codepro.ir/article-images/bau-05.gif
حال در سربرگر IPs addresses، تیک گزینه های Throttle all local networks (LAN) connections و Throttle 'localhost' connections را بزنید:
http://bau.codepro.ir/article-images/bau-06.gif
چند امکان دیگر نیز در لیست ToDo دارم که در نسخه های نهایی به این کامپوننت اضافه می کنم.
-----------------------------------------------------------
آپدیت در تاریخ 27/1/89 - انتشار Beta 2
قابلیت های اضافه شده:
1) نمایش سرعت آپلود فایل
2) بررسی میزان حجم فایل ارسالی در سمت Client پیش از شروع عملیات آپلود. در صورتی که میزان حجم فایل انتخاب شده بیش از مقداری باشد که در Web.Config تنظیم کرده اید، بلافاصله این مورد به کاربر اعلام می شود.
3) اضافه شدن رنگ های زرد و مشکی به Progress Bar
دانلود از پست 7 همین تاپیک:
http://barnamenevis.org/forum/showpost.php?p=953960&postcount=7
-----------------------------------------------------------
آپدیت در تاریخ 30/1/89 - انتشار Beta 3
قابلیت های اضافه شده:
1) آپلود همزمان چند فایل
2) ایجاد قالب دلخواه برای اجزای مختلف کامپوننت
دانلود از پست 22 همین تاپیک:
http://barnamenevis.org/forum/showpost.php?p=956993&postcount=22
-----------------------------------------------------------
دوستان لطف کنند و این کامپوننت رو تست بفرمایند و در صورتی که هرگونه مشکل، پیشنهاد یا انتقادی داشتید، در همین تاپیک مطرح بفرمایید.
موفق باشید. :لبخندساده:
http://bau.codepro.ir (http://bau.codepro.ir/)
AJAX، دنیای وب را متحول کرده است. هر روز ابزارها و قابلیت های بیشتری بر مبنای آن معرفی و موجب هر چه کمتر شدن فاصله ی میان برنامه های Web-Based و Desktop-Based می شوند.
متاسفانه AJAX به گونه ای طراحی شده است که فقط امکان ارسال داده های متنی را دارد و نمی توان با آن داده های باینری را منتقل نمود. این نقطه ضعف موجب شده است تا امکان آپلود فایل ها بدون PostBack شدن صفحه میسر نباشد. حتی کنترل AsynsFileUpload در مجموعه ی AJAX Control Toolkit نیز با ایجاد یک Frame اقدام به ارسال فایل به Server می کند.
موتور Gecko نسخه ی 1.9.1 که مرورگر Firefox در نسخه ی 3.5 خودش از آن استفاده می کند، قابلیتی را به کامپوننت XMLHttpRequest که هسته ی اصلی AJAX را تشکیل می دهد اضافه کرد که به موجب آن امکان ارسال داده های باینری نیز فراهم شده است. این قابلیت موجب شد تا به فکر ایجاد کامپوننتی برای ASP.NET بیفتم که امکان آپلود فایل ها را بدون نیاز به PostBack صفحه می دهد. ضمن اینکه میزان درصد آپلود، حجم کل فایل و میزان حجمی که تا زمان جاری آپلود شده است نیز نمایش داده می شود. در این مقاله به طور کامل با این کامپوننت، نحوه ی استفاده و قابلیت های متنوع آن آشنا خواهید شد.
قبل از شروع، بهتر است به دو سوالی که احتمالاً در ذهنتان ایجاد شده است پاسخ دهم.
سوال: فقط Firefox؟
پاسخ: هر مرورگری که از موتور Gecko نسخه ی 1.9.1 استفاده می کند، می تواند از این کامپوننت استفاده کند. برای دیدن لیستی از این مرورگرها به لینک ذیل مراجعه بفرمایید:
http://en.wikipedia.org/wiki/Comparison_of_web_browsers#General_information
سوال: مرورگر Internet Explorer در حال حاضر بیشترین سهم بازار مرورگرها را میان کاربران در اختیار دارد. برای این مرورگر چه فکری شده است؟
پاسخ: متاسفانه قابلیت جدید اضافه شده به کامپوننت XMLHttpRequest در مرورگر Internet Explorer پشتیبانی نمی شود. اما برای این کامپوننت، یک Property با نام IsSupported ایجاد کردم که می توان با بررسی آن، متوجه شد که آیا این کامپوننت توسط مرورگر کاربر پشتیبانی می شود یا خیر. از آنجا که محبوب ترین مرورگری که از موتور Gecko استفاده می کند مرورگر Firefox است، در صورتی که کاربر از مرورگری به جز Firefox 3.5 و بالاتر استفاده می کرد، می توان به شکل معمول اجازه ی آپلود به کاربر را داد: بدین شکل که یک کامپوننت FileUpload و یک Button را در یک Panel با خاصیت Visible در ابتدا برابر با False قرار دهید و در صورتی که مقدار برگشتی خصیصه ی IsSupported برابر با False بود، Panel را به کاربر نشان دهید.
Source این کامپوننت رو بعد از تست نهایی قرار میدم.
با این مقدمه به سراغ این کامپوننت می رویم.
ابتدا نمایی از Demo ی این کامپوننت را ببینیم:
http://bau.codepro.ir/article-images/bau-01.gif
نام این کنترل را BAU گذاشتم. BAU مخفف Behoo Ajax Uploader است.
کنترل BAU در Visual Studio 2008 و با C# نوشته شده و از دو قسمت تشکیل شده است. BAU Handler و Control BAU.
ابتدا در مورد BAU Handler توضیح میدم. BAU Handler یک Http Handler است.
1) فایل BAUHandler.dll رو با Browse از طریق انتخاب گزینه ی Add Reference از منوی Project به پروژه اضافه کنید. (اگر از حالت Web Site برای ایجاد پروژه استفاده کرده اید، گزینه ی Add Reference در منوی Website وجود دارد)
2) فایل Web.Config را باز کرده و سکشن <httpHandlers> را پیدا کنید. قبل از تگ پایان اون، عبارت ذیل رو برای رجیستر کردن Http Handler در پروژه اضافه کنید:
<add verb="POST" path="*.aspx" type="BAUHandler.UploadHandler, BAUHandler"/>
3) BAU Handler حتماً نیاز به 3 مقدار دارد. این مقادیر از فایل Web.Config خوانده میشن و در تگ appSettings قرار می گیرن:
<appSettings>
<add key="BAU-SaveFolder" value="Uploads"/>
<add key="BAU-MaxFileSize" value="1024"/>
<add key="BAU-GenerateUniqueFileName" value="false"/>
</appSettings>
پارامتر BAU-SaveFolder، مسیری رو مشخص می کنه که فایل هایی که آپلود میشن در اون قرار می گیرند. این مسیر نسبت به ریشه ی اصلی سایت سنجیده میشه. در مثال فوق مشخص شده است که فایل های آپلودی باید در پوشه ی Uploads که در ریشه ی اصلی سایت هست قرار بگیرن.
پارامتر BAU-MaxFileSize، حداکثر میزان مجاز اندازه ی فایل آپلودی توسط کاربر رو تعیین می کنه. این مقدار بر حسب کیلو بایت هست. در مثال فوق، حداکثر میزان مجاز اندازه ی فایل، برابر با 1 مگابایت تنظیم شده است.
نکته: در ASP.NET به طور پیش فرض، حجم Request ارسالی به Server برابر با 4096 کیلو بایت است. در صورتی که مقدار پارامتر BAU-MaxFileSize را به مقداری بیش از 4096 تنظیم می کنید، باید مقدار خصیصه ی maxRequestLength سکشن httpRuntime رو که از زیر سکشن های تگ <system.web> هست به همان میزان تعیین کنید.
پارامتر BAU-GenerateUniqueFileName تعیین می کند که آیا نام فایل آپلودی باید تغییر یافته و برابر با یک عبارت GUID تنظیم شود یا خیر. معمولاً این مقدار رو باید به True تنظیم کنید تا از Overwrite شدن فایل آپلودی بر روی فایلی با نام مشابه جلوگیری کنید.
اگر یکی از سه پارامتر فوق در فایل Web.Config وجود نداشته باشند یا مقدار نامعتبری به اونها نسبت داده بشه، در زمان آپلود با خطا مواجه خواهید شد. البته برای این کامپوننت روتین کنترل خطای خوبی در سمت Client پیاده سازی کردم که در ادامه با اون آشنا خواهید شد.
کار ما با BAU Handler به اتمام رسیده است.
حال سراغ BAU Control می رویم. ظاهر کنترل BAU از یک Progress Bar و یک عبارت که میزان حجم کل فایل و مقدار آپلود شده تا زمان جاری را نمایش می دهد تشکیل شده است.
برای Progress Bar، از کامپوننتی استفاده کردم که با jQuery پیاده سازی شده است. بنابراین نیاز به jQuery دارید. آخرین نسخه ی jQuery در زمان نوشتن این مقاله، نسخه ی 1.4.2 آن است که در فایل ضمیمه موجود است. کامپوننت Progress Bar نیاز به فایل js خود با نام jquery.progressbar.min.js و پوشه ی images دارد. این پوشه در پوشه ی BAU-Test وجود دارد. پس فایل های jquery.progressbar.min.js و jquery-1.4.2.min.js را با استفاده از تگ src در تگ head صفحه قرار داده و پوشه ی images را نیز در کنار صفحه قرار دهید.
بر روی Toolbox راست کلیک و گزینه ی Choose Items را انتخاب کنید. فایل BAUControl.dll را از طریق Browse انتخاب و OK کنید. کنترل BAU که آیکون یک Progress Bar را دارد به Toolbox اضافه می شود. آن را Drag کنید و بر روی صفحه بیندازید. دایرکتیو Register به طور خودکار به بالای صفحه اضافه می شود. سینتکس تعریفی کامپوننت در حالت "پیش فرض" به شکل ذیل خواهد بود:
<cc1:AjaxUploader ID="AjaxUploader1" runat="server" ProgressColor="Red" ProgressTextFormat="Percentage">
</cc1:AjaxUploader>
در نهایت، سلسله مراتب فایل های پروژه به شکل ذیل خواهد بود:
http://bau.codepro.ir/article-images/bau-02.gif
خصیصه های کنترل BAU عبارت اند از:
ButtonName: مقدار دهی به این خصیصه اجباری است. نام دکمه ای را مشخص می کند که قصد دارید با کلیک بر روی آن، عملیات آپلود آغاز شود. این دکمه می تواند از نوع Button، ImageButton یا LinkButton باشد. اگر کنترلی غیر از این نوع کنترل ها را انتخاب کنید، برنامه این مورد را تشخیص داده و در زمان اجرا با خطا مواجه خواهید شد.
FileUploadName: مقدار دهی به این خصیصه اجباری است. نام کنترل FileUpload ای را مشخص می کند که کنترل BAU باید با آن ارتباط برقرار کند.
ProgressColor: مقدار دهی به این خصیصه اختیاری است. رنگ کنترل Progress Bar را تعیین می کند. مقدار این خصیصه یکی از مقادیر Red، Orange و Green یک Enum با نام ProgressColor است. (مقدار پیش فرض، Red است)
ProgressTextFormat: مقدار دهی به این خصیصه اختیاری است. نوع نمایش درصد مقدار آپلود شده را مشخص می کند و یکی از مقادیر Percentage یا Fraction یک Enum با نام ProgressTextFormat را می پذیرد. (مقدار پیش فرض، Percentage است)
IsSupported: مقدار True یا False را برگشت می دهد و فقط خواندنی است. مشخص می کند که کنترل BAU توسط مرورگر پشتیبانی می شود یا خیر.
OnCompletedFunction: مقدار دهی به این خصیصه اختیاری است. این خصیصه نام یک متد جاوا اسکریپت در سمت کلاینت را می پذیرد که این تابع پس از پایان عملیات آپلود فراخوانی می شود. به عنوان مثال می توانید در تابعی که به این خصیصه معرفی می کنید، با استفاده از دستور alert، اتمام موفقیت آمیز عملیات آپلود را به کاربر گزارش دهید. به عنوان مثال، تابعی که در Demo ی برنامه نوشتم به شکل ذیل هست:
function onCompleted() {
alert("File Uploaded");
}
OnErrorFunction: مقدار دهی به این خصیصه اختیاری است. این خصیصه نام یک تابع جاوا اسکریپت در سمت کلاینت را می پذیرد که این تابع در صورت وقوع خطا در زمان آپلود فراخوانی می شود. سینتکس این تابع به شکل ذیل است:
functionName(code)
پارامتر code یک کد HTTP است که Handler BAU در صورت وقوع خطا ارسال می کند. کدهای HTTP که ارسال می شوند و در پارامتر code قرار می گیرند عبارت اند از:
کد 400: در صورتی که درخواست ارسالی نامعتبر باشد و Header های لازم را به همراه نداشته باشد، کد 400 برگشت داده می شود.
کد 404: در صورتی که یکی از مقادیر مورد نیاز BAU Handler در فایل Web.Config وجود نداشته باشند یا مسیر تعیین شده برای ذخیره ی فایل ها بر روی سرور نامعتبر باشد، کد 404 برگشت داده می شود.
کد 413: در صورتی که میزان حجم فایل انتخاب شده توسط کاربر از میزان حجم مجاز بیشتر باشد، کد 413 برگشت داده می شود.
به عنوان مثال، تابعی که در Demo ی برنامه نوشتم به شکل ذیل هست:
function onError(code) {
switch (code) {
case 400:
alert("Bad Request");
break;
case 404:
alert("Resource Not Found");
break;
case 413:
alert("Request Entity Too Large");
break;
default:
}
}
چند نکته:
1) اعطای مجوز Write را به پوشه ای که فایل های آپلودی در آن قرار می گیرند فراموش نکنید.
2) از آنجا که در حالت local، اجرای برنامه سریع صورت می پذیرد، برای اینکه عملکرد این کامپوننت را بر روی سیستم خود مشاهده کنید، پلاگین Firefox Throttle را برای Firefox از لینک ذیل دانلود و نصب کنید:
https://addons.mozilla.org/en-US/firefox/addon/5917
پس از نصب این پلاگین، در نوار زیرین Firefox، تصویر ذیل را مشاهده خواهید نمود:
http://bau.codepro.ir/article-images/bau-03.gif
بر روی آن راست کلیک و گزینه ی Options را انتخاب کنید. فرمی همانند شکل ذیل را خواهید دید:
http://bau.codepro.ir/article-images/bau-04.gif
تیک گزینه ی Throttle upload را بزنید، گزینه ی Custom را از لیست روبروی آن انتخاب و مقدار را بر روی 5 تنظیم و OK کنید:
http://bau.codepro.ir/article-images/bau-05.gif
حال در سربرگر IPs addresses، تیک گزینه های Throttle all local networks (LAN) connections و Throttle 'localhost' connections را بزنید:
http://bau.codepro.ir/article-images/bau-06.gif
چند امکان دیگر نیز در لیست ToDo دارم که در نسخه های نهایی به این کامپوننت اضافه می کنم.
-----------------------------------------------------------
آپدیت در تاریخ 27/1/89 - انتشار Beta 2
قابلیت های اضافه شده:
1) نمایش سرعت آپلود فایل
2) بررسی میزان حجم فایل ارسالی در سمت Client پیش از شروع عملیات آپلود. در صورتی که میزان حجم فایل انتخاب شده بیش از مقداری باشد که در Web.Config تنظیم کرده اید، بلافاصله این مورد به کاربر اعلام می شود.
3) اضافه شدن رنگ های زرد و مشکی به Progress Bar
دانلود از پست 7 همین تاپیک:
http://barnamenevis.org/forum/showpost.php?p=953960&postcount=7
-----------------------------------------------------------
آپدیت در تاریخ 30/1/89 - انتشار Beta 3
قابلیت های اضافه شده:
1) آپلود همزمان چند فایل
2) ایجاد قالب دلخواه برای اجزای مختلف کامپوننت
دانلود از پست 22 همین تاپیک:
http://barnamenevis.org/forum/showpost.php?p=956993&postcount=22
-----------------------------------------------------------
دوستان لطف کنند و این کامپوننت رو تست بفرمایند و در صورتی که هرگونه مشکل، پیشنهاد یا انتقادی داشتید، در همین تاپیک مطرح بفرمایید.
موفق باشید. :لبخندساده: