2017-07-11 1 views
1

Je suis en train de passer une image retournée à partir d'une API sous la forme de bytes à l'extrémité avant d'ajouter à la page.C# à JS: Comment ajouter img src au format d'image base64 (RawBytes)?

I NE PAS ne pas enregistrer l'image dans le système de fichiers, en la faisant passer de cette façon.

La réponse est retournée, mais je ne sais pas comment terminer cette procédure.

Voici mon appel API:

[HttpGet("api/GetCamImages")] 
public async Task<HttpResponseMessage> ImageFromPath() 
{ 
    RestClient client = new RestClient("http://MYIPADDRESS/cgi-bin/snapshot.cgi?channel=0"); 
    RestRequest request = new RestRequest(Method.GET); 
    request.AddHeader("cache-control", "no-cache"); 
    request.AddHeader("authorization", "Basic YLKHSouHSSUGh2"); 
    TaskCompletionSource<IRestResponse> taskCompletion = new TaskCompletionSource<IRestResponse>(); 

    RestRequestAsyncHandle handle = client.ExecuteAsync(request, r => taskCompletion.SetResult(r)); 
    RestResponse restResponse = (RestResponse)(await taskCompletion.Task); 
    StringContent myContent = new StringContent(Convert.ToBase64String(restResponse.RawBytes)); 

    var response = new HttpResponseMessage(System.Net.HttpStatusCode.OK); 

    response.Content = myContent; 
    response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/png"); 

    return response; 
} 

Mes js:

$http.get('/api/GetCamImages').then(function (response) { 
    console.log(response.data); 
    $("#imgContainer").append('<img src="data:image/png;base64,' + response.data.content + '" />'); 
}); 

Le console.log ci-dessus affiche ceci:

Console error

Pour confirmer - Je me rends compte que l'img src ci-dessus vient cependant [object, Object], ce qui explique pourquoi l'image ne s'affiche pas. Mais comment feriez-vous cet appel entier avec succès?

+1

Certes, vous devez r eturn une chaîne base64: 'Convert.ToBase64String (restResponse.RawBytes)' - vous ne pouvez pas insérer de données binaires brutes dans 'data: image/png; base64,' –

+0

@AlexK. J'ai changé pour 'response.Content = new StringContent (restResponse.RawBytes);' mais il y a toujours une erreur 'can not convert by byte [] en string' qui apparaît pour 'restResponse.RawBytes'. – NoReceipt4Panda

+2

'new StringContent (Convert.ToBase64String (restResponse.RawBytes));'? –

Répondre

0

I a été en mesure de résoudre ce à l'aide de deux manières (à la fois dépendait de la méthode de l'extrémité arrière étant modifiée d'un bit), où une voie utilisait RestSharp, et l'autre utilisée HttpClient:

Solution 1:

RestClient client = new RestClient("http://MYIPADDRESS/cgi-bin/snapshot.cgi?channel=0"); 
RestRequest request = new RestRequest(Method.GET); 
request.AddHeader("cache-control", "no-cache"); 
request.AddHeader("authorization", "Basic YLKHSouHSSUGh2"); 
TaskCompletionSource<IRestResponse> taskCompletion = new TaskCompletionSource<IRestResponse>(); 
RestRequestAsyncHandle handle = client.ExecuteAsync(request, r => taskCompletion.SetResult(r)); 
response = (RestResponse)await taskCompletion.Task; 

return "data:image/png;base64," + Convert.ToBase64String(response.RawBytes); 

Solution 2:

HttpClient client = new HttpClient(); 
var byteArray = Encoding.ASCII.GetBytes("username:password"); 
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); 
HttpResponseMessage response = await client.GetAsync("http://MYIPADDRESS/cgi-bin/snapshot.cgi?channel=0"); 
byte[] myBytes = await response.Content.ReadAsByteArrayAsync(); 
string convertedFromString = Convert.ToBase64String(myBytes); 

return "data:image/png;base64," + convertedFromString;