2014-10-08 108 views
0

我在ubuntu 14.04.1上使用node.js v0.10.32,嘗試並使用aws-sdk(2.0.18)上傳(並下載)一個來自S3的文件。但上傳大文件時出現以下錯誤,例如32MB。Node.js AWS S3 [RangeError:超出最大調用堆棧大小]

(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral. 
... 
(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral. 
RangeError: Maximum call stack size exceeded 

我試圖使堆棧大小更大node --stack-size=16384 ...但沒有運氣。 這是我上傳的源代碼:

if (process.argv.length < 7) { 
    console.log ("usage: " + process.argv [0] + " " + process.argv[1] + " <config> <region> <bucket> <key> <file>") 
    return -1 
} 

var config = process.argv[2] 
var region = process.argv[3] 
var bucketName = process.argv[4] 
var key = process.argv[5] 
var file = process.argv[6] 

var fs = require ('fs') 
var aws = require ('aws-sdk') 
fs.readFile (config, "utf8", function (err, configFile) { 
    if (err) { 
     console.log ("Config file cannot be read: ", err) 
     return -1 
    } 
    aws.config = JSON.parse (configFile) 
    aws.config.region = region 

    var bucket = new aws.S3 ({params: {Bucket: bucketName}}) 

    fs.readFile (file, function (err, fileData) { 
     if (err) { 
      console.log ("Cannot open file for uploading: ", err); 
     } else { 
      bucket.createBucket (function() { 
       var data = {Key: key, Body: fileData} 
       bucket.putObject (data, function (err, data) { 
        if (err) { 
         console.log ("Error uploading data: ", err); 
        } else { 
         console.log ("Successfully uploaded!"); 
        } 
       }) 
      }) 
     } 
    }) 
}) 

我不知道,現在,請大家幫忙。 也許aws的分段上傳是上傳大文件的解決方案?

+0

您可能會在[此問題]上發表您的意見(https://github.com/aws/aws-sdk-js/issues/158)。另外,爲了上傳文件,你可以嘗試類似['s3-upload-stream'](https://github.com/nathanpeck/s3-upload-stream),這樣你就不必將整個文件加載到內存上傳它。 – mscdex 2014-10-08 11:32:21

回答

0

雖然我找不到爲什麼堆棧大小超過最大值,但我發現它的原因。

問題是S3不快,網絡不穩定使情況更糟。 這與this question有關。

解決此問題的一種方法是利用分段上傳與重試機制(sample code,可在1中找到)。

相關問題