您不需要自己读取流(在您的情况下,由于var str =’‘,您似乎正在从二进制转换为字符串然后返回),然后附加作为二进制缓冲区的数据等。
尝试让putObject像这样通过流传输流:
gm(request('http://www.some-domain.com/some-image.jpg'), "my-image.jpg") .resize("100^", "100^") .stream(function(err, stdout, stderr) { var data = { Bucket: "my-bucket", Key: "my-image.jpg", Body: stdout ContentType: mime.lookup("my-image.jpg") }; s3.client.putObject(data, function(err, res) { console.log("done"); }); }); });有关更多信息,请参见这些发行说明。
如果流/管道不起作用,则可能会发生类似这样的情况,将所有内容加载到内存中然后上载。在这种情况下,我认为您只能使用4Mb。
var buf = new Buffer(''); stdout.on('data', function(data) { buf = Buffer.concat([buf, data]); }); stdout.on('end', function(data) { var data = { Bucket: "my-bucket", Key: "my-image.jpg", Body: buf, ContentType: mime.lookup("my-image.jpg") }; s3.client.putObject(data, function(err, res) { console.log("done"); }); });


