iformfile - Devolver imagen jpeg desde Asp.Net Core WebAPI
iformfile asp.net core (3)
Usando la API web principal de asp.net , quiero tener mi método de acción del controlador para devolver un flujo de imagen jpeg .
En mi implementación actual, el navegador solo muestra una cadena json . Mi expectativa es ver la imagen en el navegador.
Al realizar la depuración utilizando herramientas de desarrollo de Chrome, encontré que el tipo de contenido aún es
Content-Type:application/json; charset=utf-8
devuelto en el encabezado de respuesta, aunque en mi código configuro manualmente el tipo de contenido a "imagen / jpeg".
Buscando una solución Mi API web es la siguiente
[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;
}
PhysicalFile ayuda a devolver archivos desde Asp.Net Core WebAPI con una sintaxis simple
[HttpGet]
public IActionResult Get(int imageId)
{
return new PhysicalFile(@"C:/test.jpg", "image/jpeg");
}
Solución limpia utilizar FilestreamResult
!!
[HttpGet]
public async Task<IActionResult> Get()
{
var image = System.IO.File.OpenRead("C://test/random_image.jpeg");
return File(image, "image/jpeg");
}
Explicación:
En ASP.NET Core, debe utilizar el método integrado de File()
dentro del controlador. Esto le permitirá configurar manualmente el tipo de contenido.
No cree ni devuelva HttpResponseMessage
, como estaba acostumbrado a utilizar en la API web ASP.NET 2. ¡No hace nada, ni siquiera genera errores!
[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");
}
}