我将图像作为字节数组存储在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]"/>
}
这是在网络浏览器中显示的内容:
以下是Intellisense的截图:
所以图片不为空,它是一个字节数组。图像本身是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
}
我在这里撕扯我的头发试图弄清楚为什么这不起作用,因为我认为我已经做好了一切。我做错了什么?
非常感谢
答案 0 :(得分:3)
您误解了<img>
标记。
<img src="..." />
可让您显示图片来自网址
src
属性必须指定返回实际图像的URL。
如果您想在页面中嵌入图片,可以使用data:
URI。