I am trying to work on a function to download a google file straight to memory. It works for downloading it to a file but I want to skip that step and hold the contents in memory. Can someone please lend a few ideas on how to handle the piping into a string or buffer? Here is my code below
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)
})
}
I was trying to download it to a string and I couldn't figure out how to make a buffer with a dynamic byte allocation. To recap it works for passing an actual file into createWritableStream but I want it to go straight to memory.
Perhaps the easiest way is to use a module like stream-buffers
to replace your file stream with:
const streamBuffers = require('stream-buffers');
...
let dest = new streamBuffers.WritableStreamBuffer();
To access the data:
dest.on('finish', () => {
let data = dest.getContents();
...
});