2013-03-27 9 views
5

मैं की तरह तोकैसे अपलोड करने के लिए/प्रदर्शन

public class NewsItem 
{ 
    public virtual int Id { get; set; } 
    public virtual string NewsTitle { get; set; } 
    public virtual string NewsContent { get; set; } 
    public virtual byte[] NewsImage { get; set; } 
    public virtual DateTime DateAdded { get; set; } 
    public virtual bool IsLive { get; set; } 
} 

मैं तो इतना की तरह एक दृश्य के माध्यम से इस डेटा को प्रदर्शित एक डेटा मॉडल है इकाई की रूपरेखा के साथ ASP.net MVC4 का उपयोग कर छवियों तो इसलिए की तरह मेरे नियंत्रक में _db.SaveChanges() का उपयोग कर डेटा को बचाने:

[Authorize] 
    [HttpPost] 
    public ActionResult Create(CreateNewsViewModel input) 
    { 
     if (ModelState.IsValid) 
     { 
      var news = new NewsItem(); 
      news.NewsTitle = input.nTitle; 
      news.NewsContent = input.nContent; 
      news.DateAdded = input.nDateAdded; 
      news.IsLive = input.nIsLive; 
      Mydb data = new Mydb(); 
      data.NewsItems.Add(news); 
      data.SaveChanges(); 
      return View("Index", data.NewsItems); 

     } 
     else 
     { 
      return View(input); 
     } 
    } 

वर्तमान में मैं एक छवि अपलोड सा नहीं है। मैं इसे किस तरह लूं? मेरे डीबी में मेरे पास बाइनरी फ़ील्ड है, और मेरी ऑब्जेक्ट में मेरा डेटा टाइप बाइट [] है। लेकिन मुझे नहीं पता कि मुझे छवि अपलोड को संभालने की आवश्यकता है?

क्या मुझे एक अलग कार्रवाई की आवश्यकता है जो दृश्य देता है? इस पर कुछ संकेतक भव्य होंगे।

चीयर्स

उत्तर

9

आप अपलोड की गई छवि को संभालने के लिए देखें और WebImage का एक उदाहरण से अपलोड करने के लिए प्रकार फ़ाइल की एक इनपुट फ़ील्ड चाहता हूँ:

दृश्य:

<input type="file" name="image" /> 

नियंत्रक :

WebImage image = WebImage.GetImageFromRequest(); 
byte[] toPutInDb = WebImage.GetBytes(); 

// ... put the byte array into the database 

अपने डेटाबेस से छवियों को प्रदर्शित करने के लिए, आप w चींटी एक नियंत्रक क्रिया जो आपके डेटाबेस से बाइट सरणी को पुनर्प्राप्त करती है और एक फ़ाइल एक्शन देता है। आप bytearray पर एक और WebImage उदाहरण instantiating द्वारा (नियंत्रक कार्रवाई पुन: प्राप्त करने के लिए छवि) इस छवि को प्राप्त कर सकते हैं आप डेटाबेस से पुनः प्राप्त:

WebImage image = new WebImage(byteArrayFromDb); 

File(image.GetBytes(), "image/" + image.ImageFormat, image.FileName); 
+1

आपको शायद 'बाइट [] toPutInDb = WebImage.GetBytes(); 'to' byte [] toPutInDb = image को बदलने की आवश्यकता होगी।GetBytes(); ' –

+0

तो यदि मैं httpPost कार्रवाई में अपने नियंत्रक में WebImage सामग्री करता हूं तो फ़ील्ड को बाइट [] मान के रूप में सेट करें, तो यह डेटा पर किया जाएगा। SaveChanges()। अच्छा लगता है। मैं इसे बाद में जाऊंगा। लोगों के जवाब के लिए धन्यवाद। –

+0

मेरा वेब इमेज। GetImageFromRequest हमेशा शून्य देता है। क्यों कोई विचार? –

3

मैं इस तरह जाना होगा:

अपने मॉडल कक्षा में

:

public class NewsItem 
{ 
    public virtual int Id { get; set; } 
    public virtual string NewsTitle { get; set; } 
    public virtual string NewsContent { get; set; } 
    public virtual string NewsImage { get; set; } //string instead of byte because you don't wanna store your whole image file in your database, but just the path of the image, and the image you will store in a folder somewhere on the server 
    public virtual DateTime DateAdded { get; set; } 
    public virtual bool IsLive { get; set; } 
} 
अपने नियंत्रक में

:

[Authorize] 
    [HttpPost] 
    public ActionResult Create(CreateNewsViewModel HttpPostedFileBase file)// add this 
    { 
     if (ModelState.IsValid) 
     { 
      if (file != null) 
      { 
       file.SaveAs(HttpContext.Server.MapPath("~/Images/") + file.FileName); 
       car.ImagePath = file.FileName; 
      } 
     // the rest of the code... 

     } 
     else 
     { 
      return View(input); 
     } 
    } 
फिर अपने विचारों में

आप होना चाहिए:

अपलोड करने के लिए

:

<input id="NewsImage" title="Upload a image" type="file" name="file" /> 

foreach चक्र ऐड में प्रदर्शन के लिए:

@Html.DisplayFor(modelItem => item.NewsImage) 

enctype = "multipart/form-data"Html.BeginForm

मुझे उम्मीद है कि इससे मदद मिलेगी।

संबंधित मुद्दे