From 18b350ebcce3ec7374f44af44ca2bca44e1e85d1 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Tue, 11 Nov 2014 16:05:14 -0700 Subject: [PATCH] feat(sharing): directly stream avatar screenshot to aws --- package.json | 3 ++- src/routes/pages.js | 38 +++++++++++++++----------------------- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index a3e0fde436..48503271e0 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/routes/pages.js b/src/routes/pages.js index 23fb894c18..259b414237 100644 --- a/src/routes/pages.js +++ b/src/routes/pages.js @@ -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); }); }); });