2017-04-06 67 views
0

我正在使用下載圖像的第三方服務,但它的響應主體包括html和base64(不確定)圖像內容。響應包含內容類型爲image/jpeg; charset=utf-8如何從http響應使用node.js獲取原始圖像

迴應示例:

����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/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,我會試試這個。當我使用REST客戶端測試服務時,有一個問題會提取圖像,並在圖像選項卡部分顯示。這是如何工作的? – user3640709

+0

這不起作用 – user3640709

+0

@ user3640709有沒有很多事情要做,所以我很難真正幫助。如果完全有可能保存一個HTML響應併發送給我,我可能會爲你做更多的事情。 – powerc9000

相關問題