Javascript 无法通过phantomjs Web服务器传递图像文件

Javascript 无法通过phantomjs Web服务器传递图像文件,javascript,node.js,phantomjs,Javascript,Node.js,Phantomjs,我正在尝试让phantomjs Web服务器为我工作 我想提供2个文件,html文件和一个png图像文件,html文件在浏览器中提供得很好并且呈现正确,但png文件不是 这是服务器的代码 var fs = require('fs'); function loadFile(name){ if(fs.exists(name)){ console.log(name+ " File exist"); return fs.open(name,"r"); }else { conso

我正在尝试让phantomjs Web服务器为我工作

我想提供2个文件,html文件和一个png图像文件,html文件在浏览器中提供得很好并且呈现正确,但png文件不是

这是服务器的代码

var fs = require('fs');
function loadFile(name){
if(fs.exists(name)){
    console.log(name+ " File  exist");
    return fs.open(name,"r");
}else {
    console.log("File do not exist");
}
}
var server, service;

server = require('webserver').create();

service = server.listen(8080, function (request, response) {    

if(request.url.split(".")[1] === "html" ){
    var fi = loadFile("./test.html");
    response.statusCode = 200;
    response.write(fi.read());
    fi.close();
    response.close();
}else if (request.url.split(".")[1] === "png"){
    var fi = loadFile("./output_87.png");
    response.headers = {"Content-Type":"image/png"};
    response.statusCode = 200;
    response.write(fi.read());
    fi.close();
    response.close();
}
});
这是html文件标记

<html>
<head><title>title</title></head>
<body><h1> Hello world </h1>
    <img src="output_87.png" alt="image">
</body>
</html>

标题
你好,世界
在浏览器中查看此文件时,不会渲染png文件,即使我尝试将浏览器指向png文件,也不会渲染它

我用chrome开发者工具检查了网络状态,确认该文件已被浏览器完全下载

怎么了

顺便说一下,我必须使用phantomjs,请不要告诉我使用其他服务器

谢谢


Joe

您试图使用异步函数,就好像它们是同步的一样。您正在使用的所有文件系统函数(
exists()
open()
read()
)都是异步的,并尝试调用回调函数(您没有提供回调函数)以获得所需的结果;他们不会返回它。要么使用这些函数的同步版本,要么(更好)学习如何使用异步I/O。

我认为如果您正在读取PNG文件,fs.open()调用应该使用“rb”作为二进制读取模式。模式“r”适用于您的html,因为它是文本,但尽管它仍将读取PNG文件并将其提供给浏览器,但图像数据不可渲染。

这适用于我(假设您有响应对象):


示例代码中没有任何异步内容。这是PhantomJS和Node.js脚本!我刚刚在phantomjs存储库上发送了一个PR来修复这个问题(代码可能很糟糕,但对我来说很有用)嗨,亲爱的,谢谢你的参与,这是一个3年前的问题,它可能适用于今天的版本。。。您使用的phantomjs版本是什么?
  var fs = require("fs");
  var image = fs.open("image.png", "rb");
  var data = image.read();
  image.close();
  response.setHeader("Content-Type", "image/png");
  response.setEncoding("binary");
  response.write(data);
  response.close();