2013-08-12 4 views
6

Esiste un modo per tornare risultato PhantomJS froma webserver come binario?Ritorno risultato binario da phantomjs webserver

Per essere più precisi, se rendo uno screenshot di una pagina come Base64, posso poi trasformo questa stringa base64 in binario e lo restituisce in modo che il cliente riceve come immagine?

Questo è quello che ho finora, ho commentato alcuni dei miei esperimenti che operano apparentemente pretende molto

response.statusCode = 200; 
response.setHeader("Content-Type", "image/png"); 
//response.setHeader("Content-Encoding","base64"); 
var base64 = page.renderBase64('png'); 
//var binary=atob(base64,"b"); 
response.write(base64 ); 
response.close();  

Idee?

+0

Avete qualche progressi sulla questione? – naneri

risposta

0

La soluzione è utilizzare binary encoding nel modulo webserver e page.evaluate all'interno del modulo di pagine Web per generare contenuto binario.

il risultato è qualcosa di simile (assumendo pagina è definito):

response.statusCode = 200; 
response.setEncoding("binary"); 
response.setHeader("Content-Type", "image/png"); 
var base64 = page.renderBase64('png'); 
var binary = page.evaluate(function (data) { return atob(data, "b");}, base64); 
response.write(binary) 
response.close(); 
+0

La sua assolutamente necessario utilizzare page.evaluate! È solo più lento! – Lux

+0

Ho impostato il tipo di contenuto troppo agli esempi server web in modo da poter confrontare le immagini e il codice phantomjs reso agains mia vita firefox il rendering è analizzato in uscita. Il server Web è così bello. anche u può automatizzare entrambi i test utilizzando Selenio e unittest, come esempio. – erm3nda

6

Si può solo impostare la codifica in binario, e funzionerà:

response.statusCode = 200; 
response.headers = { 
    'Cache': 'no-cache', 
    'Content-Type': 'image/png' 
}; 
response.setEncoding('binary'); 
response.write(atob(page.renderBase64('png'))); 
response.close(); 
+0

Che diavolo è 'atob'? – devius

+2

@devius suo per decodificare i dati BASE64: [mdn] (https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64) [w3c] (http://www.w3.org/TR /html5/webappapis.html#dom-windowbase64-atob) – Lux

+0

Proprio imbattuti in questo: codifica binaria è rotto in PhantomJS release corrente (https://github.com/ariya/phantomjs/issues/13026) –