2016-03-29 9 views
-2

Asp.Net Mvc 6では、画像をデータベースに追加するために画像をバイトに変換しようとしています。正しいエンコーディング方法を使用する方法を見つけることができません。誰かがコードの下でこれを訂正するのを助けることができますか?間違っているのはエンコーディングです:UInt32は与えられたコンテキストでは有効ではありません。イメージをAsp.Net Mvc 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

まあ、試してみてください。から来るUInt32'とそれが想定しているが意味する? – CodeCaster

+0

BinaryReaderのコンストラクタをチェックするだけで、C#の構文を使って渡す必要があることを理解できます。 –

+0

ちょうど私がより多くの情報がより良いことを指摘したいと思った。あなたは何がうまくいかないかを指定しません。例外をスローしますか? –

答えて

2

あなたコントローラーアクションは、この

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

ようになるコントローラーのヘルパーメソッド

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

あなたはMVC 5

使用を使用している場合は、この

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



     } 
+1

いいえ、それはAsp.Net 5 Mvcでコーディングするメソッドではありません。6.ありがとうございます。 – Sisovin

+0

あなたはあなたの行動結果とあなたが使用しているコントロールの詳細を与えることができますか?実際には、mvc 6または5でコード化した天気は変わりません。ファイルタイプをポストするには、input type = "file"解決策。 –

+0

上記の私のリポジトリとコントローラを参照してください。 – Sisovin

3

はこの `エンコーディングんこの

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