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のスクリーンショットは次のとおりです。
したがって、 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
}
私はここで髪を引き裂いて、なぜこれが機能しないのかを解明しようとしています。私はすべてを正しく行ったと思います。私は何が間違っているのですか?
どうもありがとう