2016-11-10 1 views
0

Google API 노드 클라이언트를 사용하여 Google 드라이브에서 pdf를 다운로드하고 있는데 service.files.get 함수에서 오는 데이터에 액세스하는 방법을 알 수 없습니다. 내 코드는 다음과 같습니다 :데이터를 문자열로 변환 Google Node API

이 다운로드를 사용하여 전자 메일로 첨부 파일을 보내고 있습니다. dest 변수를 통해 파일을 내 디스크에 저장하지 않고 대신 download 함수에서 base64 인코딩 된 문자열을 반환하는 것을 선호하지만 API 요청에서 들어오는 데이터에 액세스 할 수 없습니다. 누구든지이 정보에 접근하기 위해 올바른 목적지를 가리킬 수 있습니까?

코드를 그대로 실행하면 파일이 잘 다운로드되지만 .pdf 데이터가 스트리밍되는 위치 나 데이터 이벤트에 액세스하는 방법을 파악할 수 없습니다.

답변

2

응답 본문의 청크를 클로저의 변수에 누적 해보십시오. 'end'이벤트 콜백에서 전체 축적에 액세스 할 수 있습니다. 또한 다운로드 함수에 제공되는 콜백을 통해 비동기 함수에서 문자열을 반환하는 예제를 제공했습니다. 참고로 promises/async/etc. 대신이 작업을 수행 할 수 있습니다. 'Stream Consumers'에 대한 Node.js 'Stream'문서는 특히 적합합니다 (https://nodejs.org/docs/latest-v5.x/api/stream.html#stream_api_for_stream_consumers).

function download(auth, fileId, doneCb) { 
    var respData = ''; 
    var service = google.drive('v3'); 

    service.files.get({ 
    auth: auth, 
    fileId: fileId, 
    alt: 'media' 
    }) 
    .on('data', function(chunk) { 
    respData += chunk; 
    }) 
    .on('end', function() { 
    // respData should contain all of the data now 
    doneCb(respData); 
    }) 
    .on('error', function (err) { 
    console.log('Error during download', err); 
    }); 
} 
+0

이 작업을 수행 할 때 여전히 인증 토큰을 포함하는 JSON 개체 만 가져오고 그 이유는 확실하지 않습니다. 파일이 잘 다운로드되지만 어떤 이유로 데이터에 액세스 할 수 없습니다. 구글 API가 이상한 일을하고이 정보에 대한 액세스를 제공하지 못했습니까? –

+0

Google Node.js API 클라이언트 퀵 스타트 문서를 살펴본 결과 스트리밍 관리가 필요없는 것처럼 보입니다. 완료 후 트리거 된 콜백에 전달 된 두 번째 인수로 파일에 액세스 할 수 있어야합니다. service.files.get ({...}, function (err, resp) {resp.resource ...}) 요청 본문 지정 '요청의 본문은 의뢰.' (https://github.com/google/google-api-nodejs-client#usage) https://developers.google.com/drive/v3/web/quickstart/nodejs – Clark

+1

클라크가 맞습니다. 당신이 언급 한 것처럼 데이터는 resp.resource를 통해 전달되지 않습니다. 나는 그것이 단지 요청을위한 것이라고 믿는다. 위의 내 대답을 참조하십시오. 도와 주셔서 감사합니다! –

0

GitHub에서 API 문제를 파헤친 후 다운로드 응답 데이터를 얻는 방법을 발견했습니다. 이것은 응답 데이터를 제공하는 함수에 전달되는 두 번째 매개 변수를 통해 발생합니다.

service.files.get({ 
    auth: auth, 
    fileId: fileId, 
    alt: 'media' 
}, { 
    encoding: null // make sure that we get the binary data 
}, function (err, buffer) { 
    // I wrap this in a promise to handle the data 
    if (err) reject(err); 
    else resolve(buffer); 
}); 
관련 문제