رفع الصور الى المخدم أو الى قاعدة البينات :
من الامتيازات الكبيرة التي توفرها مواقع الانترنت هي عملية رفع الصور حيث أن هذه الصور تعطي الموقع جماليات وامتيازات وتضيف خدمات أكثر للمستخدم وبالتالي الحصول على تطبيق أكثر قيمة من المعتاد وهذه الصور يجب أن يتم وضعها اما في مجلد داخل الملقم أو في قاعدة البيانات وفي هذه المقالة سنقوم بمناقشة كلا الحلين وطرق تنفيذهام عن طريق عمل مثال صغير .
تصميم الصفحة :
نقوم أولاً بوضع HTML File Field وزرين أحدهما لرفع الصورة الى المخدم والاخر لحفظها في قاعدة البينات .
بعد ذلك نقوم بجعل المكون HTML File Field يعمل على المخدم وذلك بالضغط عليه بالزر اليمين واختيار Run at server وبعد ذلك نقوم بتغيير اسمه الى File1 .
حفظ الصورة في المخدم :
حفظ الصورة في مخدم الموقع هي مهمة من أكثر المهمات سهولة فقط كل ما عليك فعله هو وضع الكود التالي عند الضغظ على زر رفع البيانات .
private void BtnUploadImage_Click(object sender , System.EventArgs e)
{
// gets the filename only without the path
string fileName = System.IO.Path.GetFileName(File1.PostedFile.FileName);
// You can get the size of the file also
int fileSize = File1.PostedFile.ContentLength;
File1.PostedFile.SaveAs(Server.MapPath(FILE_PATH + fileName));
}لكن يجب أن تضع في اعتبارك ان FILE_PATH هو ثابت قيمته عبارة عن مسار المجلد الذي نرغب في وضع الصور به و يتم تعريفه بالشكل التالي :
Private const string FILE_PATH = @"images\";
حفظ الصور في قاعدة البيانات :
الان لنلقي نظرة على حفظ البيانات في قاعدة البيانات , في البدأ قم بانشاء قاعدة بيناتك المنشودة والجدول الذي ترغب في حفظ الصور به
وليكن اسمه Users يحوي الحقول التالية وانواع بياناتها :
EmpID int EmpName nvarchar(50) Email navarchar(50) Picture image
الان بعد أن أصبح الجدول جاهزاً لنلقي نظرة على الكود المنفذ عند الضغط على زر الحفظ في قاعدة البيانات .
private void BtnSaveToDB_Click(object sender , System.EventArgs e)
{
Stream inputStream = File1.PostedFile.InputStream;
int imageLength = File1.PostedFile.ContentLength;
byte[] imageBinary = new byte[imageLength];
int inputRead = inputStream.Read(imageBinary , 0 , imageLength);
byte[] imageData = imageBinary;
string connectionString = (string) ConfigurationSettings.AppSettings["ConnectionString"];
SqlConnection myConnection = new SqlConnection(connectionString);
string insertQuery = @"INSERT INTO Person(Name , Email , Picture)
VALUES(@Name , @Email , @Picture)";
SqlCommand myCommand = new SqlCommand(insertQuery , myConnection);
myCommand.CommandType = CommandType.Text;
myCommand.Parameters.Add("@Name" , SqlDbType.NVarChar , 50);
myCommand.Parameters["@Name"].Value = "New User";
myCommand.Parameters.Add("@Email" , SqlDbType.NVarChar , 50);
myCommand.Parameters["@Email"].Value = "someone@somewhere.com";
myCommand.Parameters.Add("@Picture" , SqlDbType.Image , 16);
myCommand.Parameters["@Picture"].Value = imageData;
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}شرح الكود :
ببساطة في هذا الكود نحن نقوم بقراءة الstream من الخاصية File1.PostedFile.InputStream ثم نقوم بانشاء مصفوفة بايتات byte array ومن ثم قراءة الـStream وتعبئة المصفوفة بها وفي النهاية نقوم بارسال مصفوفة البايتات byte array الى قاعدة البينات كمعامل لتعليمة sql والتي تقوم بعمل insert للصورة .
ارجوا أن تعم الفائدة الجميع من هذه المقالة , ولا تنسوا الدعاء لنصرة هذه الأمة