const fs = require('fs'); const ShortId = require('shortid'); const ATTACHMENT_STORE = '../images'; const ATTACHMENT_STORE_PROFILE = '/profile'; const ATTACHMENT_STORE_MESSAGE = '/message'; const ATTACHMENT_SUFFIX_DETAIL = '_detail'; const ATTACHMENT_SUFFIX_THUMBNAIL = '_thumbnail'; function generateFilename (filename, type = 'detail') { var re = /(?:\.([^.]+))?$/; var ext = re.exec(filename)[1]; return shortid.generate() + (type === 'thumbnail' ? ATTACHMENT_SUFFIX_THUMBNAIL : ATTACHMENT_SUFFIX_DETAIL) + "." + ext; } function processImage (data, context, type, callback) { var folder = ATTACHMENT_STORE + (context === 'profile' ? ATTACHMENT_STORE_PROFILE : ATTACHMENT_STORE_MESSAGE); var filename = generateFilename(data.imageFilename, type); var data_url = data.image; var matches = data_url.match(/^data:.+\/(.+);base64,(.*)$/); var base64_data = matches[2]; var buffer = new Buffer(base64_data, 'base64'); saveImage(folder + '/' + filename, buffer, callback); } function saveImage (filename, data, callback = function(){}) { fs.writeFile(filename, data, function (err, stat) { if (err) { callback(err, null); } else { callback(null, filename.substring(2)); } }); } module.exports = { save: (data, filename, callback = function(){}) { saveImage(filename, data, callback); }, saveMessageImage: (data, callback) => { processImage(data, 'message', 'detail', callback); }, saveProfileDetailImage: (data, callback) => { processImage(data, 'profile', 'detail', callback); }, saveProfileThumbnailImage: (data, callback) => { processImage(data, 'profile', 'thumbnail', callback); } };