عبدالله الناصري نشر 23 أبريل 2017 أرسل تقرير نشر 23 أبريل 2017 (معدل) السؤال الأول: ما الصحيح؟ رفع الملفات (pdf,docs,images,voice,video) الى قاعدة البيانات مباشرة أم الحفظ في مجلد على السيرفر؟ السؤال الثاني: قمت برفع ملفات الى قاعدة البيانات .. كيف أستطيع اعادة تسمية الملف بعد رفع لتجنب عمل overwriting في قاعدة البيانات اريد اعادة تسمية الملف ( سنة، شهر، يوم،ساعة،دقيقة،ثانية) مثال : ملف سيتم رفعه اسمه c# books.pdf بعد عملية الرفع يجب ان يكون : 20170423102315 بحيث لو شخص آخر قام برفع نفس الملف لا يكون هناك تضارب وعمل اعادة كتابة لنفس الملف بأمل المساعدة في الكود بيئة العمل ASP.NET CSHARP تم التعديل في 23 أبريل 2017 بواسطة عبدالله الناصري خطأ املائي 1 اقتباس
0 mohamd emran نشر 23 أبريل 2017 أرسل تقرير نشر 23 أبريل 2017 الاجابة على السؤال الاول هي بالطبع تقوم بعمل مجلد لوضع الملفات المحملة فيه , الاجابة على السؤال التاني مع امثلة واي تفاصيل اخرى تحتاجها ,قمت بكتابتها لك طريقة رفع الملفات في ال 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 التحقق من امور اكثر من اسم الملف او نوعه وحجمه ساترك لك اكتشافها بنفسك على حسب حاجتك . اتمنى انا اكون قد فدتك . اقتباس
0 Web lover نشر 24 أبريل 2017 أرسل تقرير نشر 24 أبريل 2017 بالنسبة لسؤالك حول الأفضلية لتخزين الملفات يفضل تخزين الملفات في مجلد و تخزين مسار الملف فقط في قاعدة البيانات لتفادي التحميل الزائد (overload) على قاعدة البيانات . و لضمان عدم تكرار إسم الملف بإستخدام التاريخ و الوقت يمكنك إستخدام الكود string filename = DateTime.Now.ToString("MMddyyyyHHmmss"); المتغير filename سيحوي تاريخ اليوم مع الوقت بالساعة و الدقيقة و الثانية يمكنك الإستفادة منه بالإضافة إلى ما تفضل الأخ mohamd emran بشرحه . اقتباس
0 عبدالله الناصري نشر 24 أبريل 2017 الكاتب أرسل تقرير نشر 24 أبريل 2017 مشكورين يا اخوان على اجابتكم وسعة صدركم كيف اقوم بتخزين المسار في قاعدة البيانات بعد ان قمت بحفظ الملف في المجلد؟ اقتباس
0 Khalil Saleem نشر 3 مايو 2017 أرسل تقرير نشر 3 مايو 2017 الأفضل والأسهل تخزين فقط المسار، وليس الملف كامل في قاعدة البيانات هنالك عدة طرق لوضع اسم ملف فريد، منها DateTime.Ticks ودالة GUID.NewGUID() تجد شرح كامل لي في هذا الفيديو اقتباس
السؤال
عبدالله الناصري
السؤال الأول:
ما الصحيح؟ رفع الملفات (pdf,docs,images,voice,video) الى قاعدة البيانات مباشرة أم الحفظ في مجلد على السيرفر؟
السؤال الثاني:
قمت برفع ملفات الى قاعدة البيانات .. كيف أستطيع اعادة تسمية الملف بعد رفع لتجنب عمل overwriting في قاعدة البيانات
اريد اعادة تسمية الملف ( سنة، شهر، يوم،ساعة،دقيقة،ثانية)
مثال :
ملف سيتم رفعه اسمه c# books.pdf
بعد عملية الرفع يجب ان يكون : 20170423102315
بحيث لو شخص آخر قام برفع نفس الملف لا يكون هناك تضارب وعمل اعادة كتابة لنفس الملف
بأمل المساعدة في الكود
بيئة العمل ASP.NET CSHARP
تم التعديل في بواسطة عبدالله الناصريخطأ املائي
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.