Получение байтов [] изображения из базы данных как IFormFile - PullRequest
2 голосов
/ 07 октября 2019

Я создаю 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 выглядит так:

{"Невозможно неявно преобразовать тип 'object' в 'byte []'. Существует явное преобразование (вам не хватает приведения?)"}

Я не знаю, должен ли этот кодбудь правильным или нет, но data всегда равно нулю. Я также попробовал оператор SQL (SELECT Image FROM RecipeImage WHERE RecipeId = '140') в SSMS, и он выводит правильный вывод:

1]

Есть ли другой способ, которым я мог бы добиться того, что я пытаюсьделать?

1 Ответ

3 голосов
/ 07 октября 2019

Вы не говорите 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 });
}

, которыйвыдаст исключение, если будет найдено больше или меньше одного изображения.

...