从phantomjs webserver返回二进制结果

Rog*_*son 6 javascript base64 mime-types phantomjs

有什么方法可以将PhantomJS网络服务器的结果作为二进制文件返回?

更具体地说,如果我将页面的屏幕截图呈现为base64,那么我可以将此base64字符串转换为二进制并返回它,以便客户端将其作为图像接收吗?

这就是我到目前为止所做的,我已经评论了一些显然无效的实验

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();       
Run Code Online (Sandbox Code Playgroud)

想法?

Lux*_*Lux 6

您可以将编码设置为二进制,它将起作用:

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

  • @devius用于解码BASE64数据:[mdn](https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64)[w3c(http://www.w3.org/TR/ HTML5/webappapis.html#DOM-windowbase64-ATOB) (2认同)

Cyb*_*axs 0

解决方案是在webserver模块和网页模块内的page.evaluate中使用二进制编码来生成二进制内容。

结果是这样的(假设页面已定义):

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();
Run Code Online (Sandbox Code Playgroud)