مقدمة في كثير من الحالات، نحتاج إلى حفظ الصور في قاعدة البيانات. في بعض التطبيقات، توجد بعض المعلومات الحساسة التي لا يمكن تخزينها في نظام الملفات، لأن أي صور مخزنة على نظام الملفات يمكن بسهولة الحصول عليها بشكل غير قانوني من قبل المستخدم.
تناقش هذه المقالة كيفية حفظ الصور في قاعدة بيانات SQL SERVER في ASP.NET.
وفي هذا المقال سنتعرف على الجوانب التالية:
ل متطلبات تحميل ملفات الصور
ل استخدام كائنات Strem
l الحصول على حجم الصورة التي تم تحميلها ونوعها
ل كيفية استخدام طريقة InputStream؟
متطلبات تحميل ملفات الصور قبل أن نبدأ في التحميل، نحتاج إلى القيام بأمرين مهمين
يجب تعيين سمة enctype الخاصة بعلامة #Form على النموذج التالي:
enctype = "متعدد الأجزاء/بيانات النموذج"
#Provide عنصر تحكم Html يسمح للمستخدمين بتحديد ملفات الصور:
<نوع الإدخال = ملف>
# قم أيضًا بالإشارة إلى مساحة الاسم System.IO لمعالجة كائنات Strem، ويجب تطبيق العناصر الثلاثة المذكورة أعلاه على صفحات aspx. هناك أيضًا المتطلبات التالية في SQL SERVER:
# جدول يحتوي على نوع حقل واحد على الأقل من الصور
# بالإضافة إلى ذلك، سيكون من الأفضل استخدام حقل نوع Varchar لتخزين أنواع الصور، ثم لدينا جدول بيانات يحتوي على نوع حقل صورة و (التحكم في ملف HTML). نحتاج أيضًا إلى زر إرسال يمكن للمستخدم النقر عليه بعد تحديد الصورة. في حدث OnClick الخاص بالزر، نحتاج إلى الحصول على محتوى ملف الصورة وإدراجه أخيرًا في جدول البيانات. دعونا نلقي نظرة على حدث OnClick الخاص بالزر، والذي يقرأ الصورة ويدرجها في جدول البيانات.
زر إرسال رمز حدث OnClick
http://blog.downcodes.com/
خافت intImageSize كـ Int64
خافت strImageType كسلسلة
Dim ImageStream As Stream
يحصل على حجم الصورة
intImageSize = PersonImage.PostedFile.ContentLength
' يحصل على نوع الصورة
strImageType = PersonImage.PostedFile.ContentType
' يقرأ الصورة
ImageStream = PersonImage.PostedFile.InputStream
Dim ImageContent(intImageSize) كبايت
تعتيم intStatus كعدد صحيح
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
'إنشاء مثيل لكائن الاتصال والأمر
تعتيم myConnection كـ SqlConnection جديد (ConfigurationSettings.AppSettings("ConnectionString"))
تعتيم myCommand كـ SqlCommand جديد("sp_person_isp"، myConnection)
'وضع علامة على الأمر باعتباره SPROC
myCommand.CommandType = CommandType.StoredProcedure
' إضافة معلمات إلى SPROC
تعتيم prmPersonImage كمعلمة SqlParameter جديدة ("@PersonImage"، SqlDbType.Image)
prmPersonImage.Value = ImageContent
myCommand.Parameters.Add(prmPersonImage)
Dim prmPersonImageType كـ SqlParameter جديد("@PersonImageType"، SqlDbType.VarChar، 255)
prmPersonImageType.Value = strImageType
myCommand.Parameters.Add(prmPersonImageType)
حاول
myConnection.Open()
myCommand.ExecuteNonQuery()
myConnection.Close()
Response.Write("تم إضافة شخص جديد بنجاح!")
قبض على SQLexc كـ SqlException
Response.Write("فشل الإدراج. تفاصيل الخطأ هي: " & SQLexc.ToString())
إنهاء المحاولة
كيف يعمل؟
الكائن PersonImage هو عنصر تحكم HTMLInputFile. نحتاج أولاً إلى الحصول على حجم الصورة المدرجة، ويتم ذلك بالطريقة التالية:
intImageSize = PersonImage.PostedFile.ContentLength
بعد ذلك، تحتاج إلى الحصول على نوع الصورة من خلال خاصية ContentType. الشيء الأخير والأهم هو الحصول على دفق ملف الصورة، ويتم ذلك من خلال الطرق التالية:
ImageStream = PersonImage.PostedFile.InputStream
لدينا مصفوفة بايت ImageContent، وهي جاهزة للاستخدام لحفظ محتوى الصورة. تتم قراءة الصورة بأكملها من خلال طريقة القراءة لكائن الدفق. تحتوي هذه الطريقة على ثلاث معلمات، وهي:
# الموقع المستهدف لمحتوى الصورة المنسوخة
#وضعية البدء بالقراءة
# يتم الإعلان عن القسم الفرعي الذي يجب قراءته على النحو التالي:
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
الآن، نقرأ محتوى الصورة بالكامل. بعد ذلك نحتاج إلى إدراج محتوى الصورة في جدول بيانات SQL، وسوف نستخدم الإجراء المخزن لإدراج نوع الصورة والصورة في جدول بيانات SQL. إذا كنت قد شاهدت قائمة التعليمات البرمجية أعلاه، فستعرف أننا قمنا بتعيين نوع البيانات على SqlDbType.Image وبهذه الطريقة، نجحنا في حفظ الصورة في قاعدة بيانات SQL SERVER.