2012-06-19 2 views
6

を介して画像ファイルを配信することはできません、私は2つのファイル、htmlファイル、およびPNG画像ファイルを提供したい私は私がphantomjs Webサーバを取得tpはしようとしていますphantomjsウェブサーバ

のために働く、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

私はちょうどhttps://github.com/ariya/phantomjs/pullこの問題を解決するためにphantomjsリポジトリ上のPRを送ってきました/ 288 /ファイル(コードはおそらく駄目ですが、それは私のために働きます) – NiKo

答えて

-2

を教えていないdはしてください。使用しているすべてのファイルシステム関数(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

関連する問題