在dotnet核心模型中添加图片

时间:2019-04-30 14:46:55

标签: c# entity-framework razor .net-core

我有一个dotnet核心(+ razor + ef)应用程序,其模型通常为Product:-)

产品应具有关联的图片,这些图片从Products\Create.cshtmlProducts\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页面上载图片?

非常感谢

1 个答案:

答案 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中。如果不是,我建议考虑将它们与元数据(例如文件名等)一起存储在文件系统(或云存储)中。但这肯定是另外一个故事。