从数据库中获取 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 });
}
如果找到的图像多于或少于一张,将抛出异常。
我正在制作一个 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 });
}
如果找到的图像多于或少于一张,将抛出异常。