Rss Feed
Tweeter button
Facebook button
Technorati button
Reddit button
Myspace button
Linkedin button
Webonews button
Delicious button
Digg button
Flickr button
Stumbleupon button
Newsvine button
Youtube button
 

როგორ შევინახოთ სურათი ბაზაში? (.NET)

Filed Under (პროგრამირება, მონაც. ბაზები) by on 25-03-2010

Tagged Under : , , , ,

ხშირად პროექტებში გვჭირდება რომ მომხმარებლის მიერ მოწოდებული სურათი შევინახოთ ბაზაში. ბაზაში არ არსებობს ისეთი ველის ტიპი რომელიც პირდაპირ მიიღებს .jpg, .png და ა.შ გაფართოების ფაილებს. დანარჩენი დაწვრილებითში.

ბაზაში ველების ტიპებში არსებობს Binary ტიპის ველი, რომელსაც შეუძლია შეინახოს ბაიტების მასივი, ანუ პირდაპირ byte stream. რათქმა უნდა შესაძლებელია byte stream-ის სხვა ველებშიც ჩაწერა, მაგრამ მოუხერხებელია და თანაც ასეთი რამისთვის ზუსტად Binary ტიპის ველი გვჭირდება. სურათის შესანახად ასეთ ველში საჭიროა სურათის ბაიტების მასივში კონვერტაცია. ქვემოთ მოვიყვან 2 მეთოდს C#-ზე. ერთი მასზე გადაცემულ სურათის ობიექტს გადაიყვანს ბაიტების მასივში და დააბრუნებს ამ სურათის ბაიტების მასივს. მეორე მასზე გადაცემული ბაიტების მასივიდან დააბრუნებს სურათის ობიექტს.

//C# Code
//სურათის ობიექტის კონვერტაცია ბაიტების მასივში
private byte[] ImageToByteArray(System.Drawing.Image imageIn){
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}

//სურათის ბაიტების მასივის კონვერტაცია სურათის ობიექტში
private Image ByteArrayToImage(byte[] byteArrayIn) {
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}

კოდი: http://codepaste.net/tngps8

ამის შემდეგ დაბრუნებულ ბაიტების მასივს მარტივად ჩავწერთ ბაზაში. ბაზაში ჩაწერის კოდი არ მომყავს. თუ გაინტერესებთ როგორ კეთდება მის მაგალითსაც მოვიყვან აქვე.

რეალობა:

გვაქვს რაიმე პროდუქტების აღრიცხვის აპლიკაცია.

მომხმარებლის ინტერფეისიდან მოხდება სურათის არჩევა მაგ. რამე Browse ღილაკით (მომხმარებელს შეყავს პროდუქტის ინფორმაცია და სურათის შეტანაც უნდა). როდესაც მომხმარებელი გამოიძახებს დამახსოვრებას ამ სურათს გადავაწვდით ჩვენს მეთოდს, ის დააბრუნებს ბაიტების მასივს და მარტივად ჩავწერთ ბაზაში სხვა ინფოსთან ერთად. ) როდესაც საჭირო გახდება სურათის ბაზიდან ამოკითხვა და ინტერფეისზე გამოტანა, ამოვიკიტხავთ ბაიტების მასივს და დავაკონვერტირებთ სურათის ობიექტში.