2016-03-29 37 views
-2

Asp.Net Mvc 6'da, resmi veritabanına eklemek için görüntüyü bayt olarak dönüştürmeye çalışıyorum. Doğru kodlama yöntemini kullanmanın yolunu bulamıyorum. Birisi aşağıdaki kodu düzeltmek için bana yardımcı olabilir, hata kodlamada: UInt32 verilen bağlamda geçerli değil.Görüntüyü Asp.Net Mvc 6'ya Dönüştürme Mkt 6

private readonly ApplicationDbContext _context = new ApplicationDbContext(); 

    public int UploadImageInDataBase(IFormFile file, PublisherInfos publisherInfos) 
    { 
     publisherInfos.CoverImage = ConvertToBytes(file); 
     var pubInfos = new PublisherInfos 
     { 
      ImageSize = publisherInfos.ImageSize, 
      FileName = publisherInfos.FileName, 
      CoverImage = publisherInfos.CoverImage 
     }; 
     _context.PublisherInfos.Add(pubInfos); 
     int i = _context.SaveChanges(); 
     if (i == 1) 
     { 
      return 1; 
     } 
     else 
     { 
      return 0; 
     } 

    } 

// ConvertToBytes

private byte[] ConvertToBytes(IFormFile image) 
{ 
    byte[] CoverImageBytes = null; 
    var _reader = new StreamReader(image.OpenReadStream()); 
    BinaryReader reader = new BinaryReader(_reader.ReadToEndAsync, encoding: UInt32); 
    CoverImageBytes = reader.ReadBytes((int)image.Length); 
    return CoverImageBytes; 
} 

//

public IActionResult Create(PublisherInfos publisherInfos) 
    { 
     if (ModelState.IsValid) 
     { 
      IFormFile file = Request.Form.Files["CoverImage"]; 
      PublisherInfosRepository service = new PublisherInfosRepository(); 
      int i = service.UploadImageInDataBase(file, publisherInfos); 
      if (i == 1) 
      { 
       // Add file size and file name into Database 
       _context.PublisherInfos.Add(publisherInfos); 
       _context.SaveChanges(); 
       return RedirectToAction("Index", new { Message = PublisherInfoMessageId.DataloadSuccess }); 
      } 
     }   

     return View(publisherInfos); 
    } 
+2

Peki, denemek MVC 5 kullanıyorsanız: gelen UInt32' ve ne beklenir demek istiyorsun – CodeCaster

+0

Sadece BinaryReader yapıcısını kontrol edin ve C# sözdizimini kullanarak geçirmeniz gerekenleri anlayacaksınız. –

+0

Sadece daha fazla bilgi daha iyi olduğunu belirtti. Neyin yanlış gittiğini belirtmiyorsun. Bir istisna atar ... –

cevap

2

Sen Kontrolörü Eylem bu

[HttpPost] 
    public virtual ActionResult Index(HttpPostedFileBase file) 
    { 
    ..... 
    ..... 
    byte[] m_Bytes = ReadToEnd (file.InputStream); 
    .... 
    ... 
    } 

gibi olacak Kontrolör Yardımcısı Yöntem

public static byte[] ReadToEnd(System.IO.Stream stream) 
    { 
     using (var memoryStream = new MemoryStream()) 
     { 
      stream.CopyTo(memoryStream); 
      return memoryStream.ToArray(); 
     } 
    } 

Eğer

kullanımı bu

private byte[] ConvertToBytes(IFormFile file) 
     { 
      Stream stream= file.OpenReadStream(); 
      using (var memoryStream = new MemoryStream()) 
      { 
       stream.CopyTo(memoryStream); 
       return memoryStream.ToArray(); 
      } 



     } 
+1

Hayır, bu Asp.Net 5 Mvc 6 kodlama yöntemi değil. Teşekkür ederim. – Sisovin

+0

, işlem sonucunuz ve kullandığınız kontrol hakkında daha fazla bilgi verebilir, aslında mvc 6 veya 5 kodlu havalarda fark yaratmaz. Bir dosya tipini yazmak için jenerikte girdi tipi = "dosya" kullanırız. çözüm olsa da. –

+0

Lütfen yukarıda bulunan Depo ve Denetleyicime bakınız. – Sisovin

3

bu `kodlama yapar bu

private byte[] ConvertToBytes(IFormFile image) 
{ 
    byte[] CoverImageBytes = null; 
    BinaryReader reader = new BinaryReader(image.OpenReadStream()); 
    CoverImageBytes = reader.ReadBytes((int)image.Length); 
    return CoverImageBytes; 
} 
İlgili konular