2011-12-09 11 views
2

私は、(他の機能の中でも)要求されたファイルをクライアントに送信できる単純なhttp Webサーバーを作成しようとしています。
通常のテキストファイル/ htmlファイルを送信することは、魅力として機能します。問題はイメージファイルを送信することです。ここ
は(MIMEタイプを解析し、FSのNode.jsモジュールを含む後)私のコードの一部です:http-node.jsでjpgを送信する際の問題

if (MIMEtype == "image") {  
    console.log('IMAGE'); 
    fs.readFile(path, "binary", function(err,data) { 
     console.log("Sending to user: "); 
     console.log('read the file!'); 
     response.body = data; 
     response.end(); 
    }); 
} else { 
    fs.readFile(path, "utf8", function(err,data) { 
     response.body = data ; 
     response.end() ; 
    }); 
}  

私は取得していますすべての開口部http://localhost:<serverPort>/test.jpg時に、空白のページであるのはなぜ?

+1

がありますファイルが 'path'に存在することを100%確信していますか? 'console.log(path)'を実行して、存在し、そこにデータがあるファイルを指していることを確認してください。 – DaveRandom

+0

@DaveRandom - うん - それはうまくいっていると仮定するのではなく、エラーを処理することに言及するつもりだった。 –

+0

@DaveRandom yea、私はそれがそこにあると確信しています、そしてそのコードを呼び出す前に、ファイルが実際に存在することを確認しています。 – limlim

答えて

3

ここでは(私の例は、gifファイルですが、それは他のファイル/画像の種類で使用することができる)可能な限り簡単な方法でのNode.jsで画像を送信する方法についての完全な例です:

var http = require('http'), 
    fs = require('fs'), 
    util = require('util'), 
    file_path = __dirname + '/web.gif'; 
    // the file is in the same folder with our app 

// create server on port 4000 
http.createServer(function(request, response) { 
    fs.stat(file_path, function(error, stat) { 
    var rs; 
    // We specify the content-type and the content-length headers 
    // important! 
    response.writeHead(200, { 
     'Content-Type' : 'image/gif', 
     'Content-Length' : stat.size 
    }); 
    rs = fs.createReadStream(file_path); 
    // pump the file to the response 
    util.pump(rs, response, function(err) { 
     if(err) { 
     throw err; 
     } 
    }); 
    }); 
}).listen(4000); 
console.log('Listening on port 4000.'); 

UPDATE:

util.pumpは今しばらくの間、廃止されました、あなたはちょうどこのacomplishするストリームを使用することができます。

fs.createReadStream(filePath).pipe(req); 
+0

イメージファイルをjpgファイルに変更し、Content-Typeを 'image/jpeg'に変更しましたが、これは発生しません。 – limlim

+0

今、stat.sizeは0..whyです。 – limlim

+0

どのノードのバージョンを使用していますか?そのイメージは読み込み可能ですか?それは腐っている..? – alessioalex

関連する問題