2017-09-24 12 views
0

画像ファイルを読み込む際に、どのエンコーディングを使用する必要がありますか?私はイメージを持つhtmlファイルを提供するための基本的なサーバーを構築しています。私は 'utf-8'のエンコーディングでイメージファイルを読み込んでブラウザにデータを送ると、ブラウザはイメージを受信しません。ただし、エンコーディングを空の文字列({encoding: ''})に設定すると、ブラウザは画像を受信します。また、読み込みストリームオブジェクトを見ると、デフォルトのエンコーディングは 'utf-8'となっているので、なぜエンコーディングを 'utf-8'に設定するのがうまくいかないのだろうか?ここでファイルを読むときにどのようなエンコーディングを使用するかを知るには?

は動作しないコードの一部です:

let readStream = fs.createReadStream('./static/002.jpg', {flags: 'r', encoding: 'utf8'}) 
    console.log('ReadStream: ', readStream) 
    res.setHeader('Content-Type', 'image/jpeg') 
    readStream.on('data', (chunk) => { 
     res.write(chunk) 
    }) 

    readStream.on('error', (err) => { 
     console.log(err) 
    }) 

    readStream.on('end',() => { 
     console.log('Image stream ended') 
     res.end() 
    }) 

    readStream.on('close', function(){ 
     console.log("Image Stream closed") 
    }) 

そして、ここで作業を行うコードの一部です:

let readStream = fs.createReadStream('./static/002.jpg', {flags: 'r', encoding: ''}) 
     console.log('ReadStream: ', readStream) 
     res.setHeader('Content-Type', 'image/jpeg') 
     readStream.on('data', (chunk) => { 
      res.write(chunk) 
     }) 

    readStream.on('error', (err) => { 
     console.log(err) 
    }) 

    readStream.on('end',() => { 
     console.log('Image stream ended') 
     res.end() 
    }) 

    readStream.on('close', function(){ 
     console.log("Image Stream closed") 
    }) 

答えて

2

理由は、JPEG画像がバイナリであるということですこれは、プレーンバイトのシーケンスであることを意味します。 テキストファイルを読むときはencoding設定が使用されます。 encodingを指定しないか、nullを渡すと、バイナリデータを転送するのに必要なバイトの生ストリームが取得されます。

Documentation for a Readable Streamには、エンコードが指定されていないと、文字列の代わりにBufferオブジェクトが返されると記載されています。これが、デフォルトバッファエンコードutf8が適用されない理由です。

追加情報を参照してください:

  1. Node.js v8.5.0 Documentation: Buffers and Character Encodings
関連する問題