画像のサイズを変更してS3にアップロードする次の機能があります(「gm」と「knox」を使用):
var http = require('http');
var https = require('https');
var s3 = require('./s3');
var gm = require('gm');
var fs = require('fs');
module.exports.processImageUrl = function(imageUrl, filename, callback) {
var client = http;
if (imageUrl.substr(0, 8) == 'https://') { client = https; }
client.get(imageUrl, function(res) {
if (res.statusCode != 200) {
return callback(new Error('HTTP Response code ' + res.statusCode));
}
gm(res)
.geometry(1024, 768, '>')
.stream('jpg', function(err, stdout, stderr) {
if (!err) {
var file = fs.createWriteStream(__dirname + '/../tmp/' + filename + '.jpg');
stdout.pipe(file);
stdout.on('end', function() {
fs.stat(__dirname + '/../tmp/' + filename +'.jpg', function(err, stats) {
if (!err) {
var headers = {
'Content-Length': stats.size
, 'Content-Type': 'Image/jpeg'
, 'x-amz-acl': 'public-read'
};
var file = fs.createReadStream(__dirname + '/../tmp/' + filename + '.jpg');
s3.putStream(file, '/img/d/' + filename + '.jpg', headers, function(err, res) {
if(err) {
return callback(err);
} else {
fs.unlink(__dirname + '/../tmp/' + filename + '.jpg');
return callback(null, res.client._httpMessage.url);
}
});
}
});
});
} else {
callback(err);
}
});
}).on('error', function(err) {
callback(err);
});
};
多くの同時リクエストを処理すると、多くの GraphicsMagick プロセスが生成される可能性があります。画像を処理し、制御された数のプロセスを生成するキューベースのワーカーを実装することをお勧めしますか?