feat(sharing): directly stream avatar screenshot to aws

This commit is contained in:
Tyler Renelle 2014-11-11 16:05:14 -07:00
parent e6a99f33a9
commit 18b350ebcc
2 changed files with 17 additions and 24 deletions

View file

@ -5,6 +5,7 @@
"main": "./src/server.js",
"dependencies": {
"async": "~0.9.0",
"aws-sdk": "^2.0.25",
"bower": "~1.3.12",
"coffee-script": "1.6.x",
"connect-ratelimit": "0.0.7",
@ -44,7 +45,7 @@
"paypal-recurring": "git://github.com/jaybryant/paypal-recurring#656b496f43440893c984700191666a5c5c535dca",
"pretty-data": "git://github.com/vkiryukhin/pretty-data#master",
"request": "~2.44.0",
"s3": "^4.3.1",
"s3-upload-stream": "^1.0.6",
"stripe": "*",
"swagger-node-express": "git://github.com/lefnire/swagger-node-express#habitrpg",
"universal-analytics": "~0.3.2",

View file

@ -38,36 +38,28 @@ router.get('/static/avatar-:uuid.html', i18n.getUserLanguage, middleware.locals,
})
});
var Pageres = require('pageres'); //https://github.com/sindresorhus/pageres
var s3 = require('s3'); //https://github.com/andrewrk/node-s3-client
var AWS = require('aws-sdk');
AWS.config.update({accessKeyId: nconf.get("S3").accessKeyId, secretAccessKey: nconf.get("S3").secretAccessKey});
var s3Stream = require('s3-upload-stream')(new AWS.S3()); //https://github.com/nathanpeck/s3-upload-stream
var bucket = 'habitrpg-dev';
var client = s3.createClient({
s3Options: {
accessKeyId: nconf.get("S3").accessKeyId,
secretAccessKey: nconf.get("S3").secretAccessKey
}
});
router.get('/static/avatar-:uuid.png', i18n.getUserLanguage, middleware.locals, function(req, res, next) {
var filename = 'avatar-'+req.params.uuid+'.png';
new Pageres({delay: 1})
new Pageres()//{delay:1}
.src(nconf.get('BASE_URL')+'/static/avatar-'+req.params.uuid+'.html', ['140x147'], {crop: true, filename: filename.replace('.png','')})
.dest(__dirname)//TODO Delete this aftewards, or stream directly to s3 instead
.run(function (err, file) {
if (err) return next(err);
var params = {
localFile: __dirname + "/" + filename,
s3Params: { Bucket: bucket, Key: filename }
};
var uploader = client.uploadFile(params);
uploader.on('error', function(err) {
console.error("unable to upload:", err.stack);
var upload = s3Stream.upload({
Bucket: bucket,
Key: filename,
ACL: "public-read",
StorageClass: "REDUCED_REDUNDANCY",
ContentType: "binary/octet-stream"
});
//uploader.on('progress', function() {
// console.log("progress", uploader.progressMd5Amount,
// uploader.progressAmount, uploader.progressTotal);
//});
uploader.on('end', function() {
res.json(200,{file: s3.getPublicUrlHttp(bucket,filename)});
console.log("done uploading");
file[0].pipe(upload);
upload.on('uploaded', function (details) {
res.redirect(details.Location);
});
});
});