2017-04-06 3 views
0

私は画像をダウンロードするために第三者のサービスを利用していますが、その本体はhtmlとbase64(わからない)画像コンテンツを含みます。node.jsを使用してhttp応答から元の画像を取得する方法

����JFIF``��C  

$.' ",#(7),01444'9=82<.342��C   

2!!22222222222222222222222222222222222222222222222222��"�� 
���}!1AQa"q2���#B��R��$3br� 
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������  
���w!1AQaq"2�B���� #3R�br� 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
</head> 
<body onload="initslide('method1,method2,method3', '');"> 
    // More html goes here 
</body> 
</html> 

サービスコール:今

var params = { 
    url : serviceUrl, 
    form : form, 
    headers : headers 
}; 

request.post(params, function(error, response, body) { 
    if (error) { 
    console.error("Error:", error); 
    return; 
    } 
    callback(body); // In body i am getting above response 
}); 

、私はそれの画像部分をダウンロードする唯一の興味を持っていますし、PNGなどクラウド上に保存し、応答がimage/jpeg; charset=utf-8

例の応答としてコンテンツタイプを持っています/ jpeg形式。 node.jsでこれを達成する方法

+0

使用しているサービスを確認できますか?私は答えを書くのを助けるかもしれません。 HTMLからイメージデータを分離する必要があります。イメージがどこで終了し、HTMLが始まるかを知るスキームを見つけなければなりません。 – powerc9000

+0

@ powerc9000さて、私はそのサービスを独自の第三者サービスとして開示することはできません。 – user3640709

答えて

0

私は画像にシーケンス\n\n<!が含まれていないと仮定できるので、それを分割してみましょう。

var parts = body.split('\n\n<!') 

今すぐ最初の部分

var imageData = new Buffer(parts[0], 'binary'); 

だから、我々は

//I'm just assuming jpg for now 
fs.writeFile('out.jpg', imageData, cb); 

もっと

は、ファイルの種類を解釈するために行うことができるファイルにこれを保存することができ、当社の画像が含まれている必要がありますし、より堅牢にすることができますが、これはその背後にある基本的な考え方です。

また、ファイル全体をバッファに読み込んで、JPEG(FFD9)で画像シーケンスの終わりを探すことができます。これは、画像が始まり、htmlが終了するときを知らせます。

var data = new Buffer(body, 'binary'); 
for(var i=0; i<data.length; i++){ 
    if(data[i] === 0xff && data[i+1] === 0xd9){ 
     //end of file 
+0

ありがとう@ powerc9000、私はこれを試してみます。 1つは、RESTクライアントを使用してサービスをテストするときにイメージを抽出し、イメージタブセクションに表示することです。それはどうですか? – user3640709

+0

これはうまくいきません – user3640709

+0

@ user3640709私は本当に助けに苦労しているので、外出するのはあまりありません。 HTMLレスポンスの1つを保存してそれを私に送信することができれば、私はあなたのためにもっとや​​ることができるかもしれません。 – powerc9000

関連する問題