Возвращение jpeg-изображения из Asp.Net Core WebAPI
Используя asp.net core web api, я хочу, чтобы мой метод действия контроллера возвращал поток изображения jpeg.
В моей текущей реализации браузер отображает только строку json. Мое ожидание - увидеть изображение в браузере.
Во время отладки с использованием хром-инструментов для разработчиков я обнаружил, что тип контента по-прежнему
Content-Type:application/json; charset=utf-8
возвращенный в заголовке ответа, хотя в моем коде я вручную задал тип контента "image/jpeg".
Поиск решения. Мой веб-интерфейс выглядит так:
[HttpGet]
public async Task<HttpResponseMessage> Get()
{
var image = System.IO.File.OpenRead("C:\\test\random_image.jpeg");
var stream = new MemoryStream();
image.CopyTo(stream);
stream.Position = 0;
result.Content = new StreamContent(image);
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "random_image.jpeg";
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
result.Content.Headers.ContentLength = stream.Length;
return result;
}
Ответы
Ответ 1
Чистое решение использовать FilestreamResult
!
[HttpGet]
public async Task<IActionResult> Get()
{
var image = System.IO.File.OpenRead("C:\\test\\random_image.jpeg");
return File(image, "image/jpeg");
}
Объяснение:
В ASP.NET Core вы должны использовать встроенный метод File()
внутри контроллера. Это позволит вам вручную установить тип контента.
Не создавайте и не возвращайте HttpResponseMessage
, как вы привыкли использовать в ASP.NET Web API 2. Он ничего не делает, даже не выдает ошибок !!
Ответ 2
PhysicalFile помогает вернуть файл из Asp.Net Core WebAPI с синтаксисом простой
[HttpGet]
public IActionResult Get(int imageId)
{
return new PhysicalFile(@"C:\test.jpg", "image/jpeg");
}
Ответ 3
[HttpGet("Image/{id}")]
public IActionResult Image(int id)
{
if(id == null){ return NotFound(); }
else{
byte[] imagen = "@C:\\test\random_image.jpeg";
return File(imagen, "image/jpeg");
}
}