【问题标题】:Add a picture in a dotnet core model在 dotnet core 模型中添加图片
【发布时间】:2019-04-30 14:46:55
【问题描述】:

我有一个 dotnet core (+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 页面上传图片?

非常感谢

【问题讨论】:

  • 这似乎有点像家庭作业问题。你能告诉我们到目前为止你已经尝试了什么吗?看看How to Ask 以获得一些建议。
  • 这不是作业,真的。我在专业编程方面有 20 多年的经验(并且也有 :-)。不幸的是,我对 .net 技术还很陌生,而且 dotnet 核心文档很烂 :-) 我试过了,但我真的无法在网上找到有关将图片从 html 页面移动到 DB 以及反之亦然的帮助。
  • @DanielePallastrelli,您可以 use this to upload file in .Net Core 并将文件路径存储在数据库中,而不是 byte[]
  • @yW0K5o 不幸的是,我必须将整个图像存储到数据库的表中。这是我的应用程序的一个约束,因为另一个应用程序将使用相同的数据库来检索图片。
  • @DanielePallastrelli, read this to save picture in database 并使用我之前的链接如何在 .Net Core 中上传文件。

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


【解决方案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"); 
    } 
} 

注意:如果图像不是太大,将它们存储在数据库中可能没问题。如果不是 - 我建议考虑将它们与数据库中的元数据(如文件名等)一起存储在文件系统(或云存储中)。但这肯定是另一回事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-19
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多