2017-05-14 3 views
2

API에서 오는 PDF 스트림 반환을 가져오고이를 클라이언트 측에 포함시키기 위해 base64로 구문 분석하려고합니다. API 요청 본문이 무언가를 반환합니다. 내가 base64로이 방법 구문 분석하려고 해요 NodeJS와 함께 작동하지 않는 Base64로 PDF 바이너리 데이터 인코딩

%PDF-1.5 
%���� 
4 0 obj 
<< 
/Type/XObjcect 
/Subtype/Image 
/Width 799 
/Height 70 
/ColorSpace/DeviceGray 
/BitsPerComponent 8 
/Filter/FlateDecode 
/Length 5181 
>> 
stream 
x���=H#�������A�&�)���B���4iba�&O8H 
. 
. 
. 
(The rest was omitted) 

:이 같은

console.log(typeof body); // STRING 
const encoded = new Buffer.from(body).toString('base64'); //PDF NOT WORKING 

을하지만이 base64로를 가져오고 HTML에 임베딩있을 때 그것이 말하는 그 파일이 없습니다 oppened, 같은 일이 .PDF 파일로 저장하려고 할 때 발생합니다.

내가 base64로 동일한 pdf를 파싱하려고 시도하지만 이번에는 다운로드 한 pdf에서 base64 코드가 html에 포함되면 잘 동작합니다.

fs.readFile('/home/user/downloaded.pdf', function (err, data) { 
    if (err) throw err; 

    console.log(typeof data); //OBJECT 
    const pdf = data.toString('base64'); //PDF WORKS 
    }); 

내가 요청을 할 const request = require('request');을 사용하고 있습니다.

+1

'body'유형은 'Buffer'가 아니며 문자열이어야하며 요청하는 코드를 보여주십시오. 문자열은 바이너리 데이터를 포함 할 수 없습니다. – h0x91B

+0

@ h0x91B 답장을 보내 주셔서 감사합니다. 그렇습니다. 요청에 "encoding : null"을 추가하고 문자열 대신 버퍼가 생깁니다. 이 문자열을 버퍼로 파싱하는 것이 똑같을 것이라고 생각했는데, 왜 작동하지 않는지 모르겠습니다. –

답변

3

요청할 때 String 대신 Buffer을 얻으려면 옵션 인코딩을 null로 설정해야합니다.

request({ 
    method: 'GET', 
    encoding: null, 
    uri: 'http://youdomain.com/binary.data' 
}, (err, resp, data)=>{ 
    console.log(typeof data) //should be an Object 
    console.log(data.toString('base64')) 
}) 
+0

안녕하세요, 위의 코드를 시도했다. 그것은 잘 작동하고 또한 개체로 형식을 얻을. 내가 얻은 데이터는 여전히 횡설수설이지만. 그 이유는 무엇일까요? –

+0

그건 나를 위해 일했습니다! 감사!! :) –