从数据库中获取 bytes[] 图像作为 IFormFile

Getting bytes[] image from Database as IFormFile

我正在制作一个 API 可以从数据库上传和检索图像。第一部分已完成 - 图像存储在 IFormFile 变量中并作为 bytes[].

传递到数据库

图片 型号:

public class Image
{
    public int recipeId { get; set; }
    public string format { get; set; }
    public string description { get; set; }
    public IFormFile image { get; set; }
}

这就是我目前尝试编写 GET 方法的方式。我的想法是从数据库中获取字节并将它们转换成一个文件,然后可以在网页上看到。

 [Route("v1/recipe/image/{recipeId}")]
 [HttpGet()]
 public IActionResult GetImage(int recipeId)
 {
     byte[] data;
     try
     {
         using (var con = _connFactory())
         {
             data = con.Query("SELECT Image FROM RecipeImage WHERE RecipeId = @recipeId", new { recipeId }).FirstOrDefault();
         }

         return File(new MemoryStream(data), "image/jpeg", "SomeName.jpg");
     }
     catch (Exception exc)
     {
         return BadRequest();
     }
 }

exc 看起来像:

{"Cannot implicitly convert type 'object' to 'byte[]'. An explicit conversion exists (are you missing a cast?)"}

我不知道这段代码是否正确,但 data 始终为空。我还在 SSMS 中尝试了 SQL 语句 (SELECT Image FROM RecipeImage WHERE RecipeId = '140'),它给出了正确的输出:

有没有其他方法可以实现我想要做的事情?

您没有告诉 Dapper 期望的类型。

应该这样做:

using (var con = _connFactory())
{
    data = con.Query<byte[]>("SELECT Image FROM RecipeImage WHERE RecipeId = @recipeId", new { recipeId }).FirstOrDefault();
}

我个人更喜欢:

using (var con = _connFactory())
{
    data = con.QuerySingle<byte[]>("SELECT Image FROM RecipeImage WHERE RecipeId = @recipeId", new { recipeId });
}

如果找到的图像多于或少于一张,将抛出异常。