我有一个dotnet核心(+ razor + ef)应用程序,其模型通常为Product
:-)
产品应具有关联的图片,这些图片从Products\Create.cshtml
和Products\Edit.cshtml
页上载,存储在数据库表中,并显示在Products\Details.cshtml
中。
我的模型是这样的:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public byte[] Image { get; set; }
}
第一个问题:图片是否正确使用byte[]
?
第二个问题:由于我想我无法自动为图片添加CRUD页面,因此如何从剃须刀Create.cshtml
页面上载图片?
非常感谢
答案 0 :(得分:1)
在您的View
中,您可以
1)要么使用嵌入式图像字节:
<img src="data:image/jpeg;base64,@Convert.ToBase64String(Model.Image)" />
2)或-使用下面的GetImage
之类的单独的控制器操作,该操作将返回文件:
<img src="@Url.Action("GetImage", new { productId = Model.Id })" />
在这种情况下,您将需要执行以下其他控制器操作:
[HttpGet]
public FileStreamResult GetImage(Guid productId)
{
using (var dbContext = new DbContext())
{
var product = dbContext.Product.FirstOrDefault(x => x.Id == productId);
var ms = new MemoryStream(product.Image);
return new FileStreamResult(ms, "image/jpeg");
}
}
注意:如果图像不是太大,则可以将它们存储在DB中。如果不是,我建议考虑将它们与元数据(例如文件名等)一起存储在文件系统(或云存储)中。但这肯定是另外一个故事。