2013-08-12 18 views
6

Sonucu flama PhantomJS web sunucusu ikili olarak döndürmenin bir yolu var mı?phantomjs web sunucusundan ikili sonuç döndürme

Daha spesifik olmak gerekirse, bir sayfanın bir ekran görüntüsünü base64 olarak oluşturursam, bu base64 dizesini ikilik haline dönüştürebilir ve istemciyi bir resim olarak alacak şekilde döndürür miyim?

Bu şimdiye kadar, benim deneyler görünüşte çalışmıyor

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

Fikirler bazılarını yorumladı bekliyorsun nedir?

+0

herhangi var mı konuyla ilgili ilerleme var mı? – naneri

cevap

0

Çözüm, ikili içerik oluşturmak için web sunucusu modülünde binary encoding ve web sayfası modülünde page.evaluate kullanmaktır.

sonuç böyle bir şey (sayfa tanımlanır varsayarak) 'dir:

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

Sayfa.evaluate kullanmak için kesinlikle gereksiz! Sadece daha yavaş! – Lux

+0

Web sunucusu örnekleri için içerik türünü de ayarlıyorum, böylece phantomjs ekran görüntülerini karşılaştırabilirim ve işlenen kod benim canlı firefox oluşturma işleminin ayrıştırılmış çıktısıdır. Web sunucusu çok havalı. Ayrıca, her iki testi de örneğin Selenium ve UnitTest kullanarak otomatikleştirebilirsiniz. – erm3nda

6

Sadece ikili Kodlama ayarlayabilir ve işe yarayacak:

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

"atob" nedir? – devius

+2

@devius, BASE64 verilerinin kodunu çözmek için: [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

Sadece bunun üzerine tökezledi: ikili kodlama şu anki PhantomJS sürümünde bozuldu (https://github.com/ariya/phantomjs/issues/13026) –