2014-12-10 5 views
1

파일을 가져 와서 s3 버킷으로 스트리밍하려고하는데 누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까?Node/Knox를 사용하여 S3에 업로드 중입니다. 소켓이 끊어졌습니다.

내 코드 : 헤더가 제대로 채워 객체

var client = knox.createClient({ 
    key: 'AAAAAAAAAAAA', 
    secret: 'BBBBBBBBBBBB', 
    bucket: 'my-imgs', 
}); 
var elem = list.shift(); // {_id:'filename.jpg', main_img: 'http://example.com/file.jpg'} 
    request.get(elem.main_img,function(err,res){ 
     var headers = { 
      'Content-Length': res.headers['content-length'], 
      'Content-Type': res.headers['content-type'], 
      'x-amz-acl': 'public-read' 
     }; 
     console.log(headers) //outputs are ok, error comes after 
     var req = client.putStream(res, elem._id, headers,function(err,s3res){ 
     if(err) console.log(err); 
     console.log(s3res); 
     }); 
    }).on('error', function(err) { 
    console.log(err) 
    }); 

이 요청 아무것도 오류하지 않으며, 몇 초 후에 내가 얻을 :

{ [Error: socket hang up] code: 'ECONNRESET' } 

내가 내를 구성해야합니까 그것이 전송을 받아 들일 수있는 특별한 방법으로 양동이? 방금 ​​AWS 콘솔을 통해 'US 표준'으로 만들었으며 한 가지만 수행하여 업로드가 가능할 정도로 치열한 모습을 보였습니다. 나는 그것이 문제 일 수 있다는 느낌을 가지고 있지만, 그것을 고칠 방법에 관해서는 전혀 모른다. 그리고 내가 본 모든 튜토리얼은 매우 시대에 뒤떨어져있다. 실마리를 줘라!

정책 :

{ 
    "Statement": [ 
     { 
      "Sid": "allow-public-read", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::my-imgs/*" 
     }, 
     { 
      "Sid": "allow-public-put", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:PutObject", 
      "Resource": "arn:aws:s3:::my-imgs/*" 
     } 
    ] 
} 
+0

이 유 솔루션을 받으셨어요을? –

+0

콜백을 사용하고 싶다면'get (url)'대신'getFile (url, callback)'을 사용하십시오. – DaGaMs

답변

1

당신은 UR이 시도 할 수는

var http = require('http'); 

//increase the max socket limit 
http.globalAgent.maxSockets = 1024; 
+0

같은 문제가 생겼습니다. –

+0

하지만 그것은 나를 위해 작동합니다. –

0

지난 주에 나는이 같은 문제로 어려움을 겪고 있었다 app.js. 기꺼이 나는 해결책을 발견 : 작업 그것의 순서로, 당신은 당신의 S3 요청을 종료해야합니다

var req = client.putStream(res, elem._id, headers,function(err,s3res){ 
    if(err) console.log(err); 
    console.log(s3res); 
}); 
req.end(); 

또는 간단히 :

var req = client.putStream(res, elem._id, headers,function(err,s3res){ 
    if(err) console.log(err); 
    console.log(s3res); 
}).end();