【问题标题】:Download google file to memory in Node.JS在 Node.JS 中将 google 文件下载到内存
【发布时间】:2017-03-15 05:31:33
【问题描述】:

我正在尝试将谷歌文件直接下载到内存中的功能。它适用于将其下载到文件中,但我想跳过该步骤并将内容保存在内存中。有人可以就如何将管道处理成字符串或缓冲区提供一些想法吗?下面是我的代码

function downloadFile(){
  var fileId = "xxxxxx"
  var testStr = ""//was trying to write it to a string
  var dest = fs.createWriteStream(testStr);

  drive.files.export({
     auth: oauth2Client,
     fileId: fileId,
     mimeType: 'text/csv'
  })
  .on('end', function() {
    console.log('Done Dowloading' + testStr);
  })
  .on('error', function(err) {
    console.log('Error during download', err);
  })
  .pipe(dest);
  dest.on('finish', function() {
      dest.close((evt)=>{console.log(evt)});  // close() is async, call cb after close completes.
    })
  dest.on('error',function (err) {
    console.log("error in pipe of dest \n" + err)
  })
}

我试图将它下载到一个字符串中,但我不知道如何使用动态字节分配创建一个缓冲区。回顾一下它适用于将实际文件传递到 createWritableStream 但我希望它直接进入内存。

【问题讨论】:

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


    【解决方案1】:

    也许最简单的方法是使用stream-buffers 之类的模块将文件流替换为:

    const streamBuffers = require('stream-buffers');
    ...
    let dest = new streamBuffers.WritableStreamBuffer();
    

    访问数据:

    dest.on('finish', () => {
      let data = dest.getContents();
      ...
    });
    

    【讨论】:

    • 我收到一条错误消息,指出 createWriteStream() 不是构造函数。我会尝试更多地研究这个包
    • @Peter3 对不起,我的错,我修正了我的答案:)
    • 谢谢我刚刚在 npm 上找到了 write 语法。当我打印数据时,它会给我一个缓冲区,将所有内容打印成十六进制字节。您现在将其转换回“英语”是否有任何经验
    • 所以我使用了这个包公开的另一个函数。非常感谢。让数据 = dest.getContentsAsString();
    猜你喜欢
    • 2011-11-28
    • 1970-01-01
    • 2016-10-03
    • 2018-10-26
    • 2014-05-31
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    相关资源
    最近更新 更多