web-dev-qa-db-fra.com

Renvoyer une image jpeg depuis Asp.Net Core WebAPI

À l’aide de asp.net, une API Web principale , je souhaite que ma méthode d’action du contrôleur renvoie un flux d’images jpeg .
Dans mon implémentation actuelle, le navigateur affiche uniquement une chaîne json . Mon attente est de voir l'image dans le navigateur.

Lors du débogage avec chrome outils de développement, j’ai constaté que le type de contenu est toujours

Content-Type:application/json; charset=utf-8

renvoyé dans l'en-tête de la réponse, même si dans mon code, je définis manuellement le type de contenu sur "image/jpeg".

Vous cherchez une solution Mon API Web est comme ci-dessous

    [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;
    }

enter image description here

34
hannes neukermans

Solution propre utilisez FilestreamResult !!

[HttpGet]
public async Task<IActionResult> Get()
{
    var image = System.IO.File.OpenRead("C:\\test\\random_image.jpeg");
    return File(image, "image/jpeg");
}

Explication:

Dans ASP.NET Core, vous devez utiliser la méthode intégréeFile() à l'intérieur du contrôleur. Cela vous permettra de définir manuellement le type de contenu.

Ne créez pas et ne renvoyez pas HttpResponseMessage, comme vous en aviez l'habitude dans ASP.NET Web API 2. Cela ne fait rien, pas même en jetant des erreurs !!

56
hannes neukermans

PhysicalFile permet de renvoyer un fichier depuis Asp.Net Core WebAPI avec une syntaxe simple

    [HttpGet]
    public IActionResult Get(int imageId)
    {            
       return new PhysicalFile(@"C:\test.jpg", "image/jpeg");
    }
4
Antoine V