无法通过phantomjsnetworking服务器传送图像文件

我正在尝试得到phantomjsnetworking服务器为我工作

我想提供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开发者工具的networking状态,并确认该文件已被浏览器完全下载

哪里不对?

顺便说一句,我必须使用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(); 

如果你正在读取一个PNG文件,我相信你的fs.open()调用应该使用“rb”作为二进制读取模式。 模式“r”适用于您的html,因为它是文本,但是它仍然会读取PNG文件并将其提供给浏览器,因此图像数据无法呈现。

您正尝试使用asynchronous函数,就好像它们是同步的。 所有你使用的文件系统函数( exists()open()read() )都是asynchronous的,并试图调用一个callback(你没有提供)和期望的结果。 他们不return 。 要么使用这些function的同步版本,要么(更好地)学习如何使用asynchronousI / O。