2017-07-06 2 views
0

Ich versuche, ein Bild aus einer API zu ziehen und über die File() Methode zum DOM zurückzukehren.Konvertieren von IRestResponse in "image/jpg" Datei

Hier ist, was ich bisher haben ..

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"); 
    } 
} 

Das einzige Problem hier ist, dass der Fehler auf der return-Anweisung, response zeigt

nicht konvertieren kann aus 'RestSharp.IRestResponse' bis 'Byte []'


Als ich das Bild aus dem lokalen Dateisystem zieht, war es einfacher und arbeitete, hier wurde mein Arbeits Code für 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"); 
} 

Hier ist, wie ich es in meinem vorderen Ende ziehen (Index.cshtml) :

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

Diese Zeile sieht für mich aus ... 'IRestResponse response = client.Execute (Anfrage); (response.Content);' – maccettura

+0

Auch Sie wahrscheinlich 'wollen .RawBytes' statt' .Content' – maccettura

+0

@maccettura ja , aber das Hauptproblem, das ich habe, ist, wie man alles zurückgibt. Der Versuch, als Datei zurückzukehren, bereitet mir Probleme. Zumindest derzeit. – NoReceipt4Panda

Antwort

1

Diese Zeile hier:

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

Sie übergeben es response vom Typ IRestResponse (ein Typ von RestSharp).

Warum sollte die eingebaute MVC File Methode von RestSharp wissen? File()takes a byte array and a string MIME type.

Versuchen:

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

RawBytes ist ein Byte-Array der rohen Antwort von HTTP-Request. Wenn Ihre API ein Byte-Array eines Bildes zurückgibt, müssen Sie diese an Ihre Dateimethode übergeben.

+1

Ausgezeichneter Fang! Danke für Ihre Hilfe :) – NoReceipt4Panda