2013-02-10 8 views
1

Я храню изображения в виде массивов байтов внутри базы данных SQL.Почему мое изображение не отображается на мой взгляд?

Вот мой метод Index (внутри контроллера):

public ActionResult Index() 
{ 
    var list = db.UserProfiles.ToList(); 

    Dictionary<int, ActionResult> picture = list.ToDictionary(item => item.CarID, item => CarPic(item.Picture)); 

    ViewBag.CarPictures = picture; 

    return View(list); 
} 

Вот мой метод CarPic:

public ActionResult CarPic(byte[] imageBytes) 
{ 
    return imageBytes == null ? null : File(imageBytes, "image/jpeg"); 
} 

Вот как я пытаюсь отобразить изображение внутри моей точки зрения:

foreach(var item in Model) 
{ 
    <img src="@ViewBag.CarPictures[item.CarID]"/> 
} 

Это то, что отображается в браузере:

Image

Вот скриншот Intellisense:

Intellisense

Так Picture не равно нуля, то массив байт. Само изображение является JPEG. Вот код, я использую, чтобы преобразовать изображение в массив байтов, чтобы сохранить его в базе данных:

[Authorize] 
[HttpPost] 
public ActionResult Create(Stock stock, HttpPostedFileBase file) 
{ 
    if (file != null) 
    { 
     if (file.ContentType.Contains("image")) 
     { 
      using (var inputStream = file.InputStream) 
      { 
       var memoryStream = inputStream as MemoryStream; 
       if (memoryStream == null) 
       { 
        memoryStream = new MemoryStream(); 
        inputStream.CopyTo(memoryStream); 
       } 

       var data = memoryStream.ToArray(); 

       stock.Picture = data; 
      } 
     } 
    } 

    if (ModelState.IsValid) 
    { 
     db.UserProfiles.Add(stock); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(stock); 
} 

Я проверил базу данных и поле действительно заполняется. Вот моя модель Stock:

[Table("Stock")] 
public class Stock 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int CarID { get; set; } 

    public byte[] Picture { get; set; } 
    //etc etc 
} 

Я рву на себе волосы здесь, пытаясь понять, почему это не работает, как я думаю, что я сделал все правильно. Что я делаю не так?

Большое спасибо

ответ

3

Вы непонимание <img> тега.

<img src="..." /> позволяет отображать изображение по адресу.
Атрибут src должен указывать URL-адрес, который возвращает фактическое изображение.

Если вы хотите вставить изображение на страницу, вы можете использовать URI data:.

+0

Благодарим, не могли бы вы разместить ссылку на использование 'data:' URI, я новичок в Razor и HTML – JMK

+0

http://en.wikipedia.org/wiki/Data_URI_scheme – SLaks

+0

'src =" data : image/png; base64, "' – SLaks

Смежные вопросы