-
-
Save Emille1723/bc4c22782b91d5b681e4b285db5953f4 to your computer and use it in GitHub Desktop.
Store an image in redis
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var fs = require('fs'), | |
querystring = require('querystring'), | |
redis = require('redis'), | |
r = redis.createClient(), | |
allowedTypes = { | |
'text/javascript': 'js', | |
'text/css': 'css', | |
'image/png': 'png', | |
'image/jpeg': 'jpg', | |
'image/gif': 'gif', | |
'text/plain': 'txt' | |
}, | |
allowedExtensions = [], | |
contentTypes = {}; | |
for (ct in allowedTypes) { | |
allowedExtensions[allowedExtensions.length] = allowedTypes[ct]; | |
contentTypes[allowedTypes[ct]] = ct; | |
} | |
var validFile = new RegExp('^\/[a-z]+\/[0-9a-z\-]+\.('+allowedExtensions.join('|')+')$'); | |
// Never let something run as root when it's not needed! | |
if (process.getuid() == 0) { | |
process.setgid('www-data'); | |
process.setuid('www-data'); | |
} | |
exports.actions = function(req, res, ss) { | |
return { | |
uploadImage: function(data) { | |
data = data.split(';base64,'); | |
var type = data[0].substr(5); // strip the data: | |
if (!allowedTypes[type]) { | |
return; | |
} | |
// Decode the base64 data to binary. | |
data = new Buffer(data[1], 'base64').toString('binary'); | |
// Get the number of files in the upload dir. | |
fs.readdir('./client/static/uploads', function(err, files) { | |
if(!err) { | |
// Create a new file with a number as name that is one higher then the current amount of files in the uploads directory. | |
var name = './client/static/uploads/'+files.length+'.'+allowedTypes[type]; | |
var lastPath = files.length+'.'+allowedTypes[type]; | |
fs.writeFile(name, data, 'binary', function(err) { | |
console.log(lastPath+' uploaded'); | |
ss.publish.all('uploadImage', lastPath); | |
r.set( 'bezelRoom'+lastPath, data, function() { | |
var msg = 'The photo has been saved at: /'+lastPath; | |
console.log( msg ); | |
r.get( 'bezelRoom'+lastPath, function( err, data ) { | |
if( !data ) { | |
res.writeHead( 404 ); | |
res.write( "No such room" ); | |
res.end(); | |
return res(false); | |
} else { | |
console.log(data); | |
//in here we should send the bezelRoom name back in the return cb | |
return res(true); | |
} | |
}) | |
}) | |
}) | |
} | |
}) | |
} | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment