2016-03-29 11 views
1

Ich habe dieses Stück Code, um Dateien von Google Drive zum Download:NodeJS - Herunterladen von Google Drive

function downloadDrive(fileId, callback) { 
    var fileExt = fileId.split("."); 
    var file = Date.now() + "." + fileExt[fileExt.length - 1]; 
    var dest = fs.createWriteStream("./files/"+file); 
    service.files.get({ 
    auth: oauth2Client, 
    fileId: fileExt[0], 
    alt: "media" 
    }) 
    .on("finish", function() { 
    callback(file); 
    }) 
    .on("error", function(err) { 
    console.log("Error during download", err); 
    }) 
    .pipe(dest); 
} 

Es funktioniert sehr gut auf kleine Dateien ~ 500 MB. Wenn Sie jedoch versuchen, eine ziemlich große gzip-Datei ~ 3Gb herunterzuladen, wird der folgende Fehler ausgegeben.

buffer.js:23 
    const ui8 = new Uint8Array(size); 
      ^

RangeError: Invalid typed array length 
    at new Uint8Array (native) 
    at createBuffer (buffer.js:23:15) 
    at allocate (buffer.js:98:12) 
    at new Buffer (buffer.js:53:12) 
    at Function.Buffer.concat (buffer.js:225:16) 
    at BufferList.copy (/Synology/server_Metagenomics/server/node_modules/googleapis/node_modules/google-auth-library/node_modules/request/node_modules/bl/bl.js:124:21) 
    at BufferList.slice (/Synology/server_Metagenomics/server/node_modules/googleapis/node_modules/google-auth-library/node_modules/request/node_modules/bl/bl.js:99:15) 
    at BufferList.toString (/Synology/server_Metagenomics/server/node_modules/googleapis/node_modules/google-auth-library/node_modules/request/node_modules/bl/bl.js:166:15) 
    at Request.<anonymous> (/Synology/server_Metagenomics/server/node_modules/googleapis/node_modules/google-auth-library/node_modules/request/request.js:1035:36) 
    at emitOne (events.js:82:20) 
    at Request.emit (events.js:169:7) 

Ich habe nicht viele Informationen darüber gefunden. Was ist los?

Antwort

0

Sie können folgende Datei herunterladen versuchen. Der Fehler scheint zu sein, weil Sie große Datei herunterladen.

var filename = 'zzz.txt'; 
var proxyUrl = "http://" + user + ":" + password + "@" + host + ":" + port; 
var token = 'YOUR_TOKEN'; 

var req = request.get('https://www.googleapis.com/drive/v3/files/YOUR_FILE_ID?alt=media', { 
    'auth': { 
     'bearer': token 
    }, 
    'proxy': proxyUrl 
}).on('response', function(res) { 

// create file write stream 
var fws = fs.createWriteStream(filename); 

// setup piping 
res.pipe(fws); 

res.on('err', function() { 
    console.log("error occured....."); 
}); 

res.on('end', function() { 
    console.log('Done'); 
    // go on with processing 
}); 
});