mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-07-18 01:42:20 +00:00
feat(sharing): directly stream avatar screenshot to aws
This commit is contained in:
parent
e6a99f33a9
commit
18b350ebcc
2 changed files with 17 additions and 24 deletions
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue