2011-07-11 11 views
3

CouchDbデータベースに添付ファイルとしてpngをアップロードしました。ふとんで見るとうまくいきますが、クレードルで戻してみると壊れてしまいます。私はcradeに同梱crade-test.jsからsnipptletを使用し、それを少し修飾:CouchDBからクレードルgetAttachmentを使用してバイナリファイルを取得するには?

 var response = {}; 
     var streamer = db.getAttachment(data.id,filename); 
     streamer.addListener('response', function (res) { 
     response.headers = res.headers; 
     response.headers.status = res.statusCode; 
     response.body = ""; 
     }); 
     streamer.addListener('data', function (chunk) { response.body += chunk; }); 
     streamer.addListener('end', function() { 
     fs.writeFile('new-'+filename, response.body, function (err) { 
      if (err) throw err; 
      console.log('It\'s saved!'); 
      }); 
     }); 

結果が入力よりも大きい破損PNGです。ここに実例を示しました:http://jsfiddle.net/x8GZc/

答えて

1

あなたが見つけたスニペットは、テキストドキュメント(=基本的には文字列)とともに使用されます。右のトラックに私をputingため

stream = client.database('images').getAttachment(req.params.id, filename); 
// response is your HTTP response object 
stream.on('data', function(chunk) { 
    return response.write(chunk, "binary"); 
}); 
stream.on('end', function() { 
    return response.end(); 
}); 
+1

おかげで、私はfs.createWriteStreamオブジェクトを必要と私の場合: は、バイナリデータ(例えば画像)に対しては、レスポンス・オブジェクトに正しいエンコーディングを設定する必要があります。 http://jsfiddle.net/x8GZc/1/ – Nico

+2

それがあなたを助けたら私の答えを承認するといいと思います。 –

関連する問題