2016-03-29 69 views
1

下載我有這樣的一段代碼,以下載文件從Google Drive的NodeJS - 從谷歌驅動

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); 
} 

它非常好小文件,500MB的〜。但是,當試圖下載一個相當大的gzip文件〜3Gb時,會引發以下錯誤。

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) 

我沒有找到很多關於它的信息。到底是怎麼回事?

回答

0

您可以嘗試下列文件下載。該錯誤似乎是因爲您正在下載大文件。

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 
}); 
});