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]"/>
}

これは、Webブラウザに表示されるものです。

画像

Intellisenseのスクリーンショットは次のとおりです。

Intellisense

したがって、 Pictureはnullではなく、バイト配列です。画像自体は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);
}

データベースを確認しましたが、フィールドには実際にデータが入力されています。これが私のストックモデルです:

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

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

私はここで髪を引き裂いて、なぜこれが機能しないのかを解明しようとしています。私はすべてを正しく行ったと思います。私は何が間違っているのですか?

どうもありがとう

4

1 に答える 1

3

あなたは<img>タグを誤解しています。

<img src="..." />URLから画像を表示できます。
属性は、実際のsrc画像を返すURLを指定する必要があります。

ページに画像を埋め込みたい場合は、data:URIを使用できます。

于 2013-02-10T17:15:09.077 に答える