السلام عليكم ورحمة الله وبركاته
طريقة رفع الملفات في ال asp.net
والتحقق من الانواع والحجم واي تفاصيل اخرى
الادوات المستخدمه في المقال هي اداة
FileUpload1
وادارة زر Button
نقوم بوضع الاداتين في الصفحة وبعد هذا داخل حدث النقر على الزر button
نقوم بكتابة الكود الخاص بعملية رفع الملف الذي تم اختيار من الاداة FileUpload1
في داخل مجلد فرعي في مجلد المشروع الرئيسي
لنفرض ان الاسم البرمجي للادة FileUpload1 هو UpImg
في البداية نتحقق من ان المستخدم قد قام بختيار ملف لرفعه
كود:
If UpImg.PostedFile.FileName = Nothing Then
ErrorLabel.Text = "لم يتم اختيار ملف لرفعه"
Exit Sub
End If
في حالة لم يتم اختيار ملف لرفعه في داخل الاداة UpImg سوف نطبع له في داخل اداة ليبل سميناها ErrorLabel راسلة تقول انه لم يتم اختيار ملف لرفعه وبعد هذا نخرجه من تنفيذ بقية الكود المكتوب في حدث النقر على زر التحميل
اذا قام المستخدم باختيار ملف لتحميله في داخل اداة اختيار الملفات فان الجملة الشرطيه اعلاه لن تتحقق وبالتالي فانه لن يدخل لكود الجملة الشرطيه ولن يقوم بطباعة رسالة الخطأ ولن يقوم باخراجه من تنفيذ بقية الكود ,,, يعني سوف يستمر في تنفيذ الكود
الان نقوم بتعريف متغير نسند له المسار الذي سوف يتم تخزين الملف المختار لرفعه فيه مثلا هكذا
كود:
Dim FPath As String ="C:\Inetpub\wwwroot\ElectronicMall1.0\uploaded\" & IO.Path.GetFileName(UpImg.PostedFile.FileName)
في البداية قمنا باسناد المسار كامل للمجلد الذي سوف نقوم برفع الملف داخله وهو
C:\Inetpub\wwwroot\ElectronicMall1.0\uploaded\
حيث ان ElectronicMall1.0 هذا هو مجلد المشروع الرئيسي
و uploaded هذا هو اسم المجلد الفرعي الذي سوف نضع فيه الملف
بعد ذلك اسندنا للمتغير اسم الملف الذي يتم اختياره من اداة رفع الملفات UpImg بالكامل يعني الاسم مع الامتداد فلو قمت باختيار صورة اسمها pic1.gif
فان النص الكامل الذي سيتم اسناده للمتغير FPath سيكون بالشكل التالي
C:\Inetpub\wwwroot\ElectronicMall1.0\uploaded\pic1.gif
وهذا يعبر عن مسار الملف الذي سوف نقوم برفعه بعد انتهاء عملية الرفع ووضع الملف في داخل المجلد
نتوقف قليل عند المكتبة IO وتلاحظ اننا في الكود السابق استخدمناها في جلب اسم وامتداد الملف الذي تم اختيارة في اداة رفع الملفات
وهذه مكتبة كامله تتيح لك التحكم بالملفات والمجلدات
في كودنا السابق نلاحظ اننا طلبنا اسم الملف الكامل مع الامتداد للملف الموجود بهذا المسار
UpImg.PostedFile.FileName
وهذه تعيد لنا المسار الكامل للملف الذي تم اختياره من جهازك
فمثلا لو اخترنا من الجهاز ملف pic1.gif
موجود في الدرايف E مباشرة
فان المسار الذي سوف يعود في داخل UpImg.PostedFile.FileName
هو E:\pic1.gif
وباستخدام مكتبة ال IO سوف نقوم بجلب اسم الملف الكامل مع الامتداد للمسار E:\pic1.gif
وبالتالي سوف يعود لنا ب pic1.gif
وهذا مافعلناه بالكود
كود:
Dim FPath As String ="C:\Inetpub\wwwroot\ElectronicMall1.0\uploaded\" & IO.Path.GetFileName(UpImg.PostedFile.FileName)
مكتبة ال IO يمكنك فعل امور كثيره اخرى بها غير جلب اسم الملف وامتداده حيث يمكنك بواسطتها انشاء ملفات او مجلدات او حذف او تغيير اسمائها وكذلك فتح ملفات لقرائتها والكتابة فيها وغيرها من كل مايخطر ببالك من امور التعامل مع الملفات والمجلدات وهنا سوف نستخدم مانحن بحاجة له في عملية الرفع ونترك لك استكشاف باقي امكانيات المكتبة بنفسك
بعد جلب اسم الملف وامتداده نريد التأكد من امرين
1- ان الملف ضمن الامتدادت المسموح برفعها
2- ان الملف ضمن الحجم المسموح رفعه
للتأكد من امتداد الملف نستخدم مكتبة ال IO
الكود التالي سوف يعيد لنا امتداد الملف فقط بدون اسمه مثلا لو كان اسم الملف هو pic1.gif
فان الكود التالي سوف يعيد لنا الامتداد او نوع الملف فقط هكذا .gif
كود:
IO.Path.GetExtension(FPath)
الان يمكننا التحقق من نوع الملف المرفعه بكل اريحيه مثلا نقوم بتخزين امتداد ونوع الملف في متغير نسمية FEx ونقوم بالمقارنه بين الانواع المطلوبة فاذا لم يكن نوع الملف من بين الانواع المسموح رفعها نقوم باخراج رسالة عدم السماح برفع هذا النوع واخراجه من تنفيذ الكود على سبيل المثال
كود:
If FEx <> ".gif" Or FEx <> ".GIF" Then
ErrorLabel.Text = "نوع الملف الذي تم اختياره غير مسموح به"
Exit Sub
End If
الان نريد التأكد من حجم الملف ان كان ضمن الحجم المسموح برفعه والكود التالي سوف يعود لنا يحجم الملف المختار بالبايت
كود:
upimg.PostedFile.InputStream.Length
نقوم الان بالتحقق من حجم الملف بالشكال التالي مثلا
كود:
If UpImg.PostedFile.InputStream.Length > 307200 Then
ErrorLabel.Text = "حجم الملف اكبر من الحجم المسموح به"
Exit Sub
End If
وهنا منعنا تحميل اي ملف حجمه اكبر من 300 كيلو بايت
الان نريد التأكد من ان اسم الملف المرفوع غير موجود من قبل في داخل المجلد الذي سوف نقوم برفع الملف داخله لكي لا يحدث تعارض بالاسماء
ففي حالة كان الاسم موجود من قبل نقوم بمنع تحميل الملف ونخرج له رسالة تخبره بان الاسم موجود من قبل
الكود التالي سوف يعود لنا بصح او خطأ
كود:
IO.File.Exists(FPath)
في حالة كان المشار FPath موجود في الموقع من قبل وهو مسار مجلد الملفات مضاف له اسم الملف مع امتداده فسوف يعود بصح True
وان كان غير موجود فسوف يعود بخطأ False
نستخدمه في جملة شرطيه للتحقق من وجود اسم الملف او عدم بالشكل التالي مثلا
كود:
If IO.File.Exists(FPath) = True Then
ErrorLabel.Text = "اسم الملف موجود من قبل ,قم بتغيير اسم الملف"
Exit Sub
End If
الان العملية الاخيره هي عملية رفع الملف وتخزينه في داخل مجلد رفع الملفات
وهذا يتم بالكود التالي
كود:
UpImg.PostedFile.SaveAs(FPath)
بتنفيذ هذا الكود سوف يقوم برفع الملف المختار من الجهاز وتخزينه في داخل المسار الموجود في المتغير FPath
ملاحظة اخيره :-
هذا هو المبدأ العام وانت يمكنك باستخدام مكتبة ال IO التحقق من امور اكثر من اسم الملف او نوعه وحجمه يمكنك اترك لكم اكتشافها بانفسكم على حسب حاجتكم او نشرحها في درس اخر ان شاء الله تعالى
الي هنا ننتهي واي سؤال اقدر اجاوب عليه ان شاء الله مابقصر