node.js - 通过管道将数据传输至字符串 Google Node API

标签 node.js google-api-nodejs-client

我正在使用 Google API Node 客户端从我的 Google 云端硬盘下载 pdf,但我不知道如何访问从 service.files.get 函数传入的数据。我的代码如下:

function download(auth, fileId) {
    var service = google.drive('v3');
    var dest   = fs.createWriteStream('something.pdf');

    service.files.get({
        auth: auth,
        fileId: fileId,
        alt: 'media'
    })
    .on('data', function(chunk){
    console.log(chunk.toString()); // this gives me a JSON response of my bearer token, and not the pdf data
    })
    .on('end', function () {
        console.log('Done');
    })
    .on('error', function (err) {
        console.log('Error during download', err);
    })
    .pipe(dest);
}

我正在使用此下载通过电子邮件发送附件。我不想通过 dest 变量将文件保存到磁盘,而是希望从 download 函数返回一个 base64 编码的字符串,但我无法访问来自 API 请求的传入数据。谁能指出我访问此内容的正确目的地?

如果我按原样运行代码,文件下载效果很好,但我无法弄清楚 .pdf 数据从何处流入或如何访问其“数据”事件。

最佳答案

尝试将响应主体的 block 累积到闭包中的变量中。您可以在“结束”事件回调中访问完整的累积数据。我还提供了一个通过提供给下载函数的回调从异步函数返回字符串的示例。请注意,您可以使用 Promise/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);
  });
}

关于node.js - 通过管道将数据传输至字符串 Google Node API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40519651/

相关文章:

node.js - 请求将绝对预签名 URL 视为相对 URL

node.js - 如何在 mongoose 中处理 mongoDB close

node.js - 使用 google-api-nodejs-client 主体的 Gmail API

javascript - 使用 nodejs google calendar API 插入事件返回 400 : "Missing end time"

node.js - 使用 Google Drive API V3 需要的最低 NodeJs 版本是多少?

node.js - 如何在 gmail api 中创建草稿

ios - 将 socket.io 集成到 REST API 中

javascript - 使用 Express-fileupload - Node.js 上传文件时没有这样的文件或目录错误

node.js - 如何使用 Sequelize 迁移/种子插入初始数据?

javascript - Google 身份验证 token 返回不包含 refresh_token