2016-03-29 8 views
1

のダウンロード:NodeJS - 私は<code>Google Drive</code>からファイルをダウンロードするために、コードのこの部分を持っているGoogleドライブから

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 
}); 
}); 
関連する問題