将Node文件下载到Node.JS中的内存

时间:2017-03-14 20:55:03

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

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

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,但我希望它直接进入内存。

1 个答案:

答案 0 :(得分:0)

也许最简单的方法是使用像stream-buffers这样的模块来替换你的文件流:

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

访问数据:

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