Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将google文件下载到Node.JS中的内存中_Node.js_Google Api Nodejs Client - Fatal编程技术网

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

将google文件下载到Node.JS中的内存中,node.js,google-api-nodejs-client,Node.js,Google Api Nodejs Client,我正在尝试一个功能,将谷歌文件直接下载到内存中。它可以将其下载到文件中,但我想跳过这一步,将内容保存在内存中。有没有人能提供一些关于如何将管道处理成字符串或缓冲区的想法?下面是我的代码 function downloadFile(){ var fileId = "xxxxxx" var testStr = ""//was trying to write it to a string var dest = fs.createWriteStream(testStr); drive.

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

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

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

const streamBuffers = require('stream-buffers');
...
let dest = new streamBuffers.WritableStreamBuffer();
要访问数据,请执行以下操作:

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

我得到一个错误,说createWriteStream()不是构造函数。我会试着仔细检查一下包裹though@Peter3对不起,我的错,我修正了我的答案:)谢谢,我刚刚在npm上找到了写语法。当我打印数据时,它会给我一个缓冲区,将所有内容打印成十六进制字节。你有没有将它转换回“英语”的经验,所以我在这个包中使用了另一个函数。非常感谢。让data=dest.getContentsAsString();