2014-10-08 4 views
0

우분투 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

답변

0

왜 스택 크기가 최대 값을 초과하는지 알 수는 없지만 그 원인을 발견했습니다.

문제는 S3가 빠르지 않고 네트워크 불안정으로 인해 상황이 더욱 악화됩니다. 이것은 this question과 관련됩니다.

이 문제를 해결하는 한 가지 방법은 재시도 메커니즘 (sample code, 1에서 찾을 수 있음)을 사용하여 여러 부분 업로드를 사용하는 것입니다.

관련 문제