2013-08-12 55 views
6

Có cách nào để trả về kết quả từ máy chủ web Phantoma của máy chủ ảo không?Trả về kết quả nhị phân từ máy chủ ảo phantomjs

Để cụ thể hơn, Nếu tôi hiển thị ảnh chụp màn hình của trang dưới dạng base64, sau đó tôi có thể chuyển chuỗi base64 này thành nhị phân và trả về để khách hàng nhận nó dưới dạng hình ảnh?

Đây là những gì tôi đã cho đến nay, tôi đã nhận xét ra một số thí nghiệm của tôi mà dường như doesnt work

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

Ý tưởng?

+0

Có bạn có bất kỳ tiến triển về vấn đề này? – naneri

Trả lời

0

Giải pháp là sử dụng binary encoding trong mô-đun máy chủ web và page.evaluate bên trong mô-đun trang web để tạo nội dung nhị phân.

kết quả là một cái gì đó như thế này (giả sử trang được định nghĩa):

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

Hoàn toàn không cần thiết của nó để sử dụng page.evaluate! Nó chỉ chậm hơn! – Lux

+0

Tôi cũng đã thiết lập loại nội dung cho các ví dụ về máy chủ web để tôi có thể so sánh các ảnh chụp màn hình phantomj và mã trả lại một lần nữa firefox trực tiếp của tôi hiển thị kết quả được phân tích cú pháp. Máy chủ web rất tuyệt. Ngoài ra u có thể tự động hóa cả hai bài kiểm tra bằng cách sử dụng Selenium và UnitTest, ví dụ. – erm3nda

6

Bạn chỉ có thể đặt Encoding để nhị phân, và nó sẽ làm việc:

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

Cái quái gì là 'atob'? – devius

+2

@devius để giải mã dữ liệu 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

Chỉ cần vấp vào điều này: mã hóa nhị phân bị hỏng trong bản phát hành PhantomJS hiện tại (https://github.com/ariya/phantomjs/issues/13026) –