how to create validation attribute to validate file size in ASP Net core MVC

preview_player
Показать описание
اذا كنت تريد وضع validation attribute للسماح للمستخدم برفع صور او ملفات بحجم معين لن تجد validation attribute تفعل ذلك كما قلنا في الدرس السابق، لكن يمكنك انشاء validation attribute مخصصه لهذا العمل، في هذا الدرس سنتعلم كيفية عمل validation attribute لمنع المستخدم من رفع أي ملفات ذات حجم غير مسموح به ، مثلا رفع ملفات ذات حجم 5 ميجابايت فقط .

نذهب الى مشروع ASP.Net Core MVC الخاص بنا
- سنقوم بإضافة class داخل المجلد ValidationAttributes (اذا لم يكن موجود قم بإضافته) وسنسميه MaxFileSizeAttribute وسنجعله يرث من ValidationAttribute class
- سنقوم بعمل override ل IsValid function ثم نقوم بكتابة الكود الخاص بالسماح بحجم ملفات معينه فقط
- سنقوم باستقبال الحجم المسموح به من خلال ال constructor نعطى القيمة ل _maxFileSize field
- لاحظ انه عندما يقوم المستخدم بتعديل البيانات لا حاجه لرفع صوره او ملف في كل عملية تعديل لذلك نقوم بالتأكد ان كان الملف null ام لا، اذا كان الملف ب null نرجع القيمة ValidationReslt.Success لتخطي ال validation في هذه الحالة
- يمكننا الحصول على حجم الملف بالبايت من length property ، اذا كان حجم الملف اكبر من المسموح به نرجع رسالة الخطأ، ان وجد بينهم فان القيمة ValidationReslt.Success سترجع بشكل افتراضي كما وضعناها

انجزنا الجزء الخاص بعمل ال validation من جانب ال server side يمكننا أيضا عمل ال validation خلال ال client side كالتالي:
- نقوم بعمل implement ل ICleintModelValidator interface والذي يحتوي AddValidation method signature
- نضيف data-val-size attribute وستكون قيمته عباره عن رسالة الخطأ
- ملحوظة : نريد ان تكون الرسالة ديناميكية فمثلا اذا اردنا الملف بحجم معين وكان الملف بحجم اكبر تخرج رساله بالحجم المسموح به، الحجم يوجد معنا في _maxFileSize field ويمكننا عرضها في رسالة الخطأ
- نضيف data-val-max-size attribute وقيمتها ستكون الحجم المسموح به لأننا نحتاج اليه في كود ال JavaScript
- نضيف size method الخاصة بالتأكد من حجم الملف المسموح به من خلال addMethod function تستقبل تلات مدخلات ما يهمنا منها هي ال element والذي على حجم الملف
- من خلال data-val-max-size attribute التي اضفناها سابقا والتي تحمل الحجم المسموح به سنتأكد هل حجم الملف اكبر من الحجم المسموح به ام لا ، اذا كان الحجم مسموح به يتم ارجاع القيمة true وهذا معناه تخطي ال validation اذا لم يكن مسموح به يتم ارجاع القيمة false وهذا معناه الرجوع برسالة خطأ تفيد بان الحجم غير مسموح به
- لاحظ ان data-val-size attribute ينتهي باسم ال method التي اضفناها في ملف ال JavaScript والتي تسمي size
المسئولة عن اظهار client side validations من خلال addBool function

الان يمكنك الذهاب لل ViewModel الذي يحمل ال File property نقوم بإضافة MaxFileSize
ثم نقوم بإدخال الحجم المسموح به، اذا قمنا بعمل run ستلاحظ انه عندما ملفات ذات حجم غير مسموح به تظهر لك رسالة خطأ تفيد بأن حجم الملف المرفوع غير مسموح به .

follow me:
Рекомендации по теме