所以我想要做的是从URL流的图像,与实:graphicsmagick和处理它,它流上传到S3。 我只是不明白它的工作。
处理后的图像流传输到本地磁盘(使用fs.createWriteStream)的作品没有问题。
当我缓存我的信息流,在S3中的最终图像具有至少预期大小(KB-明智的),但我无法打开图像。
这就是我目前的进展:
var request = require('request');
var gm = require("gm");
var AWS = require('aws-sdk');
var mime = require('mime');
var s3 = new AWS.S3();
gm(request('http://www.some-domain.com/some-image.jpg'), "my-image.jpg")
.resize("100^", "100^")
.stream(function(err, stdout, stderr) {
var str = '';
stdout.on('data', function(data) {
str += data;
});
stdout.on('end', function(data) {
var data = {
Bucket: "my-bucket",
Key: "my-image.jpg",
Body: new Buffer(str, 'binary'), // thats where im probably wrong
ContentType: mime.lookup("my-image.jpg")
};
s3.client.putObject(data, function(err, res) {
console.log("done");
});
});
});
我曾尝试一些东西,像创建一个filewritestream和filereadstream,但我认为应该有一些更清洁的更好的解决这一问题?
编辑:我想的第一件事就是身体设置为标准输出(从@AndyD建议的答案):
var data = {
Bucket: "my-bucket",
Key: "my-image.jpg",
Body: stdout,
ContentType: mime.lookup("my-image.jpg")
};
但返回以下错误:
Cannot determine length of [object Object]'
EDIT2:
- nodeversion:0.8.6(我也尝试0.8.22和0.10.0)
- AWS-SDK:0.9.7-pre.8(今天装)
完整的错误:
{ [Error: Cannot determine length of [object Object]]
message: 'Cannot determine length of [object Object]',
object:
{ _handle:
{ writeQueueSize: 0,
owner: [Circular],
onread: [Function: onread] },
_pendingWriteReqs: 0,
_flags: 0,
_connectQueueSize: 0,
destroyed: false,
errorEmitted: false,
bytesRead: 0,
_bytesDispatched: 0,
allowHalfOpen: undefined,
writable: false,
readable: true,
_paused: false,
_events: { close: [Function], error: [Function: handlerr] } },
name: 'Error' }