Cant的保存图像与awssum和nodejs亚马逊S3

我的节点js代码从我的服务器tmp.png打开一个本地png文件,然后尝试保存它的亚马逊S3。 我一直遇到问题,我怀疑它与编码有关。 它唯一的工作方式是与base64编码(我不想为我的照片)。

fs = require('fs'); var awssum = require('awssum'); var amazon = awssum.load('amazon/amazon'); var s3Service = awssum.load('amazon/s3'); var s3 = new s3Service('mykey', 'mysecret', 'account', amazon.US_WEST_1); fs.readFile('./tmp.png', function (err, data){ if(err){ console.log("There was an error opening the file"); } else { s3.PutObject({ BucketName : 'my-bucket', ObjectName : 'tmp.png', ContentType : 'image/png', ContentLength : data.length, Body : data, }, function(err, data) { if(err){ console.log("There was an error writing the data to S3:"); console.log(err); } else { console.log("Your data has been written to S3:"); console.log(data); } }); } }); 

显然我的水桶实际上是我独特的水桶名称。 我从亚马逊回来的消息是请求超时:

您的套接字连接到服务器不在超时期限内被读取或写入。 空闲连接将被closures。

看起来像在文档中find一个例子,做我所需要的。 关键是使用fs.stat作为文件大小,而使用fs.createReadStream来读取文件:

 // you must run fs.stat to get the file size for the content-length header (s3 requires this) fs.stat(path, function(err, file_info) { if (err) { inspect(err, 'Error reading file'); return; } var bodyStream = fs.createReadStream( path ); console.log(file_info.size); var options = { BucketName : 'my-bucket', ObjectName : 'test.png', ContentType : 'image/png', ContentLength : file_info.size, Body : bodyStream }; s3.PutObject(options, function(err, data) { console.log("\nputting an object to my-bucket - expecting success"); inspect(err, 'Error'); inspect(data, 'Data'); }); });