2017-07-06 1 views
0

J'essaie de tirer une image à partir d'une API et de revenir au DOM via la méthode File().Conversion de IRestResponse en fichier "image/jpg"

Voici ce que j'ai jusqu'à présent ..

HomeController.cs:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult ImageFromPath() 
    { 
     var client = new RestClient("http://{{MYIPADDRESS}}/cgi-bin/snapshot.cgi?channel0="); 
     var request = new RestRequest(Method.GET); 
     request.AddHeader("postman-token", "random-postman-token"); 
     request.AddHeader("cache-control", "no-cache"); 
     request.AddHeader("authorization", "Digest username=\"MYUSERNAME\", realm=\"MYENCRYPTEDPASS\", nonce=\"LONGSTRING\", uri=\"/cgi-bin/snapshot.cgi?channel0\", response=\"RESPONSESTRING\", opaque=\"\""); 
     IRestResponse response = client.Execute(request);(response.RawBytes); 

     return File(response, "image/jpg"); 
    } 
} 

Le seul problème ici, est que l'erreur sur la déclaration de retour, response montre

ne peuvent pas convertir 'RestSharp.IRestResponse' à 'byte []'


Quand je tirais l'image du système de fichiers local, il était plus facile et travaillé, ici était mon code de travail pour HomeController.cs

public ActionResult ImageFromPath(string path) 
{ 
    var ms = new MemoryStream(); 
    using (Bitmap bitmap = new Bitmap(path)) 
    { 
     var height = bitmap.Size.Height; 
     var width = bitmap.Size.Width; 

     bitmap.Save(ms, ImageFormat.Jpeg); 
    } 

    ms.Position = 0; 
    return File(ms, "image/jpg"); 
} 

Voici comment je tirais dans mon extrémité avant (Index.cshtml) :

<img src="@Url.Action("ImageFromPath", new { path = Request.MapPath("~/img/1.jpg") })" /> 
+0

Cette ligne me regarde ... 'IRestResponse response = client.Execute (demande); (response.Content);' – maccettura

+0

Aussi, vous voulez probablement '.RawBytes' au lieu de' .Content' – maccettura

+0

@maccettura oui , mais le principal problème que j'ai est de savoir comment tout retourner. Essayer de revenir en tant que fichier me donne des problèmes. Au moins, actuellement. – NoReceipt4Panda

Répondre

1

Cette ligne ici:

return File(response, "image/jpg"); 

Vous le transmettez response qui est de type IRestResponse (un type de RestSharp).

Pourquoi la méthode de création de fichier MVC connaît-elle RestSharp? File()takes a byte array and a string MIME type.

Essayez:

return File(response.RawBytes, "image/jpg"); 

RawBytes est un tableau d'octets de la réponse brute de votre requête HTTP. Si votre API renvoie un tableau d'octets d'une image, c'est ce que vous devez transmettre à votre méthode de fichier.

+1

Excellente prise! Merci de votre aide :) – NoReceipt4Panda