2017-04-06 1 views
0

이미지를 다운로드하기 위해 제 3 자 서비스를 사용하고 있지만 응답의 본문에는 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 글쎄, 나는 독점적 인 제 3 자 서비스이므로 그 서비스를 공개 할 수 없다. – 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

관련 문제