2012-06-19 129 views
6

我试图TP得到phantomjs Web服务器为我工作无法通过phantomjs网络服务器提供图像文件

我想为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,请□不告诉我用另一台服务器

感谢

+1

我刚刚发送的PR上phantomjs库来解决这个问题https://github.com/ariya/phantomjs/pull/288 /文件(代码可能很糟糕,但适用于我) – NiKo

回答

-2

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

+0

示例代码没有任何异步。这是PhantomJS和Node.js脚本! –

2

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

7

这对我的作品(假设你有响应对象):

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

嗨亲爱的,感谢您的参与,这是一个3年的问题,它可能适用于今天的版本...什么是您使用的phantomjs版本? – Joseph

+0

好点,我使用PhantomJS v2.1.1 – CarelZA