2013-08-12 17 views
6

Gibt es eine Möglichkeit, das Ergebnis eines PhantomJS-Webservers als Binärdatei zurückzugeben?Rückgabe des binären Ergebnisses von phantomjs Webserver

Um genauer zu sein, wenn ich einen Screenshot einer Seite als base64 rendern, kann ich dann diese Base64-String in Binär umwandeln und es zurückgeben, damit der Client es als ein Bild erhält?

Dies ist, was ich bisher habe ich anscheinend tut, welche Arbeit

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();  

Ideen einige meiner Experimente auf Kommentar?

+0

Haben Sie eine bekam Fortschritte in diesem Bereich? – naneri

Antwort

0

Die Lösung besteht darin, binary encoding im Webservermodul und page.evaluate innerhalb des Webseitenmoduls zu verwenden, um binären Inhalt zu generieren.

das Ergebnis ist so etwas wie dieses (unter der Annahme Seite definiert ist):

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

Es ist absolut unnötig, page.evaluate zu verwenden! Es ist nur langsamer! – Lux

+0

Ich habe den Inhaltstyp auch auf die Beispiele des Webservers gesetzt, damit ich phantomjs Screenshots und gerenderten Code gegen mein Live-Firefox-Rendering vergleichen kann. Webserver ist so cool. Sie können auch beide Tests mit Selenium und UnitTest als Beispiel automatisieren. – erm3nda

6

Sie können nur die Codierung binär gesetzt, und es wird funktionieren:

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

Was zur Hölle ist "Atob"? – devius

+2

@devius ist es, BASE64-Daten zu decodieren: [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

Bin gerade darüber gestolpert: binary encoding ist in der aktuellen PhantomJS-release (https://github.com/ariya/phantomjs/issues/13026) –

Verwandte Themen