Built motion from commit 5e31ea4.|0.0.32
[motion.git] / server / api / upload / upload.controller.js
index 7386c8f..2457a8b 100644 (file)
@@ -1 +1,270 @@
-var _0x26cd=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x70\x6C\x6F\x61\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x73\x6F\x78","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x66\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x73\x6F\x75\x6E\x64\x73\x2F\x6F\x72\x69\x67\x69\x6E\x61\x6C","\x6A\x6F\x69\x6E","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x65\x78\x74\x6E\x61\x6D\x65","\x4D\x61\x78\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x66\x69\x6C\x65\x73\x20\x75\x70\x6C\x6F\x61\x64\x20\x65\x78\x63\x65\x65\x64\x65\x64","\x4F\x6E\x6C\x79\x20\x77\x61\x76\x2C\x6D\x70\x33\x2C\x67\x73\x6D\x2C\x20\x61\x6E\x64\x20\x6F\x67\x67\x20\x66\x6F\x72\x6D\x61\x74\x20\x61\x63\x63\x65\x70\x74\x65\x64","\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x66\x69\x6C\x65\x20\x73\x69\x7A\x65\x20\x69\x73\x20\x31\x35\x20\x4D\x62","\x49\x6E\x76\x61\x6C\x69\x64\x20\x72\x65\x71\x75\x65\x73\x74","\x65\x6E\x64","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","","\x6E\x61\x6D\x65","\x64\x69\x73\x70\x6C\x61\x79\x5F\x6E\x61\x6D\x65","\x66\x69\x6C\x65","\x62\x61\x73\x65\x6E\x61\x6D\x65","\x73\x61\x76\x65\x5F\x6E\x61\x6D\x65","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x70\x61\x74\x68","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x70\x61\x74\x68","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x73\x6F\x75\x6E\x64\x73\x2F\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x2E\x77\x61\x76","\x30\x37\x37\x37","\x63\x68\x6D\x6F\x64\x53\x79\x6E\x63","\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x20\x52\x65\x73\x75\x6C\x74\x3A\x20","\x6C\x6F\x67","\x69\x64\x65\x6E\x74\x69\x66\x79","\x77\x61\x76","\x74\x72\x61\x6E\x73\x63\x6F\x64\x65","\x65\x72\x72\x6F\x72","\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x20\x43\x6F\x6E\x76\x65\x72\x73\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x3A\x20","\x75\x6E\x6C\x69\x6E\x6B","\x6F\x6E","\x70\x72\x6F\x67\x72\x65\x73\x73","\x73\x72\x63","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x66\x6F\x72\x6D\x61\x74","\x66\x6F\x72\x6D\x61\x74","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x64\x75\x72\x61\x74\x69\x6F\x6E","\x64\x75\x72\x61\x74\x69\x6F\x6E","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x73\x61\x6D\x70\x6C\x65\x43\x6F\x75\x6E\x74","\x73\x61\x6D\x70\x6C\x65\x43\x6F\x75\x6E\x74","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x63\x68\x61\x6E\x6E\x65\x6C\x43\x6F\x75\x6E\x74","\x63\x68\x61\x6E\x6E\x65\x6C\x43\x6F\x75\x6E\x74","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x62\x69\x74\x52\x61\x74\x65","\x62\x69\x74\x52\x61\x74\x65","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x73\x61\x6D\x70\x6C\x65\x52\x61\x74\x65","\x73\x61\x6D\x70\x6C\x65\x52\x61\x74\x65","\x64\x65\x73\x74","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x66\x6F\x72\x6D\x61\x74","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x64\x75\x72\x61\x74\x69\x6F\x6E","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x73\x61\x6D\x70\x6C\x65\x43\x6F\x75\x6E\x74","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x63\x68\x61\x6E\x6E\x65\x6C\x43\x6F\x75\x6E\x74","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x62\x69\x74\x52\x61\x74\x65","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x73\x61\x6D\x70\x6C\x65\x52\x61\x74\x65","\x43\x6F\x6E\x76\x65\x72\x73\x69\x6F\x6E\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x64","\x73\x74\x61\x72\x74","\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x20\x55\x70\x6C\x6F\x61\x64\x20\x65\x72\x72\x6F\x72\x20\x3A","\x70\x61\x72\x73\x65","\x75\x70\x64\x61\x74\x65","\x62\x6F\x64\x79","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x2E","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x53\x65\x6E\x74\x20\x66\x69\x6C\x65\x20\x75\x6E\x64\x65\x72\x20\x3A","\x73\x74\x72\x65\x61\x6D","\x65\x6E\x63\x6F\x64\x65"];_0x26cd[0];var _=require(_0x26cd[1]);var Upload=require(_0x26cd[3])[_0x26cd[2]];var uploadFile=require(_0x26cd[4]);var sr=require(_0x26cd[5]);var sox=require(_0x26cd[6]);var path=require(_0x26cd[7]);var config=require(_0x26cd[8]);var fs=require(_0x26cd[9]);var sequelize=require(_0x26cd[3])[_0x26cd[10]];var base64=require(_0x26cd[11]);exports[_0x26cd[12]]=function(_0x9146xb,_0x9146xc){Upload[_0x26cd[17]]()[_0x26cd[16]](function(_0x9146xe){return _0x9146xc[_0x26cd[15]](200)[_0x26cd[14]](_0x9146xe)})[_0x26cd[13]](function(_0x9146xd){return handleError(_0x9146xc,_0x9146xd)})};exports[_0x26cd[18]]=function(_0x9146xb,_0x9146xc){Upload[_0x26cd[22]](_0x9146xb[_0x26cd[21]][_0x26cd[20]])[_0x26cd[16]](function(_0x9146xf){if(!_0x9146xf){return _0x9146xc[_0x26cd[19]](404)};return _0x9146xc[_0x26cd[14]](_0x9146xf);})[_0x26cd[13]](function(_0x9146xd){return handleError(_0x9146xc,_0x9146xd)})};exports[_0x26cd[23]]=function(_0x9146xb,_0x9146xc){var _0x9146xf= new uploadFile({dest:path[_0x26cd[26]](config[_0x26cd[24]],_0x26cd[25]),maxFileSize:15*1000000,maxNumberOfFiles:10,minNumberOfFiles:0,acceptFileTypes:/(\.|\/)(wav|mp3|gsm|ogg)$/i,rename:function(_0x9146x10,_0x9146x11){return sr()+path[_0x26cd[28]](_0x9146x11[_0x26cd[27]])},messages:{maxNumberOfFiles:_0x26cd[29],acceptFileTypes:_0x26cd[30],maxFileSize:_0x26cd[31],invalidRequest:_0x26cd[32]}});_0x9146xf[_0x26cd[55]](_0x26cd[33],function(_0x9146x12,_0x9146x13){var _0x9146x14={};_0x9146x14[_0x26cd[34]]=_0x26cd[35];_0x9146x14[_0x26cd[36]]=_0x9146x14[_0x26cd[37]]=path[_0x26cd[39]](_0x9146x13[_0x26cd[38]][_0x26cd[7]],path[_0x26cd[28]](_0x9146x13[_0x26cd[38]][_0x26cd[27]]));_0x9146x14[_0x26cd[40]]=path[_0x26cd[39]](_0x9146x13[_0x26cd[38]][_0x26cd[27]],path[_0x26cd[28]](_0x9146x13[_0x26cd[38]][_0x26cd[27]]));_0x9146x14[_0x26cd[41]]=path[_0x26cd[26]](config[_0x26cd[24]],_0x26cd[25]);_0x9146x14[_0x26cd[42]]=path[_0x26cd[26]](config[_0x26cd[24]],_0x26cd[43]);if(!_0x9146x13[_0x26cd[38]][_0x26cd[27]]){return _0x9146xc[_0x26cd[15]](500)[_0x26cd[14]](_0x9146xf)};var _0x9146x15=path[_0x26cd[26]](_0x9146x14[_0x26cd[41]],_0x9146x14[_0x26cd[40]]+path[_0x26cd[28]](_0x9146x13[_0x26cd[38]][_0x26cd[27]]));var _0x9146x16=path[_0x26cd[26]](_0x9146x14[_0x26cd[42]],_0x9146x14[_0x26cd[40]]+_0x26cd[44]);fs[_0x26cd[46]](_0x9146x15,parseInt(_0x26cd[45],8));sox[_0x26cd[49]](_0x9146x15,function(_0x9146xd,_0x9146x17){console[_0x26cd[48]](_0x26cd[47],_0x9146x17)});var _0x9146x18=sox[_0x26cd[51]](_0x9146x15,_0x9146x16,{sampleRate:8000,format:_0x26cd[50],channelCount:1,bitRate:192*1024,compressionQuality:5});_0x9146x18[_0x26cd[55]](_0x26cd[52],function(_0x9146xd){console[_0x26cd[52]](_0x26cd[53],_0x9146xd);fs[_0x26cd[54]](_0x9146x15,function(_0x9146xd){if(_0x9146xd){return handleError(_0x9146xc,_0x9146xd)}});return handleError(_0x9146xc,_0x9146xd);});_0x9146x18[_0x26cd[55]](_0x26cd[56],function(_0x9146x19,_0x9146x1a){});_0x9146x18[_0x26cd[55]](_0x26cd[57],function(_0x9146x1b){_0x9146x14[_0x26cd[58]]=_0x9146x1b[_0x26cd[59]];_0x9146x14[_0x26cd[60]]=_0x9146x1b[_0x26cd[61]]*1000;_0x9146x14[_0x26cd[62]]=_0x9146x1b[_0x26cd[63]];_0x9146x14[_0x26cd[64]]=_0x9146x1b[_0x26cd[65]];_0x9146x14[_0x26cd[66]]=_0x9146x1b[_0x26cd[67]];_0x9146x14[_0x26cd[68]]=_0x9146x1b[_0x26cd[69]];});_0x9146x18[_0x26cd[55]](_0x26cd[70],function(_0x9146x1b){_0x9146x14[_0x26cd[71]]=_0x9146x1b[_0x26cd[59]];_0x9146x14[_0x26cd[72]]=_0x9146x1b[_0x26cd[61]]*1000;_0x9146x14[_0x26cd[73]]=_0x9146x1b[_0x26cd[63]];_0x9146x14[_0x26cd[74]]=_0x9146x1b[_0x26cd[65]];_0x9146x14[_0x26cd[75]]=_0x9146x1b[_0x26cd[67]];_0x9146x14[_0x26cd[76]]=_0x9146x1b[_0x26cd[69]];});_0x9146x18[_0x26cd[55]](_0x26cd[33],function(){console[_0x26cd[48]](_0x26cd[77]);fs[_0x26cd[46]](_0x9146x16,parseInt(_0x26cd[45],8));Upload[_0x26cd[23]](_0x9146x14)[_0x26cd[16]](function(_0x9146xf){return _0x9146xc[_0x26cd[15]](201)[_0x26cd[14]](_0x9146xf)})[_0x26cd[13]](function(_0x9146xd){console[_0x26cd[48]](_0x9146xd);return handleError(_0x9146xc,_0x9146xd);});});_0x9146x18[_0x26cd[78]]();});_0x9146xf[_0x26cd[55]](_0x26cd[52],function(_0x9146xd){console[_0x26cd[48]](_0x26cd[79],_0x9146xd);return handleError(_0x9146xc,_0x9146xd);});_0x9146xf[_0x26cd[80]](_0x9146xb);};exports[_0x26cd[81]]=function(_0x9146xb,_0x9146xc){if(_0x9146xb[_0x26cd[82]][_0x26cd[20]]){delete _0x9146xb[_0x26cd[82]][_0x26cd[20]]};Upload[_0x26cd[22]](_0x9146xb[_0x26cd[21]][_0x26cd[20]])[_0x26cd[16]](function(_0x9146xf){if(!_0x9146xf){return _0x9146xc[_0x26cd[19]](404)};var _0x9146x1c=_[_0x26cd[83]](_0x9146xf,_0x9146xb[_0x26cd[82]]);_0x9146x1c[_0x26cd[84]]()[_0x26cd[16]](function(){return _0x9146xc[_0x26cd[15]](200)[_0x26cd[14]](_0x9146xf)})[_0x26cd[13]](function(_0x9146xd){return handleError(_0x9146xc,_0x9146xd)});})[_0x26cd[13]](function(_0x9146xd){return handleError(_0x9146xc,_0x9146xd)});};exports[_0x26cd[85]]=function(_0x9146xb,_0x9146xc){Upload[_0x26cd[22]](_0x9146xb[_0x26cd[21]][_0x26cd[20]])[_0x26cd[16]](function(_0x9146xf){if(!_0x9146xf){return _0x9146xc[_0x26cd[15]](404)[_0x26cd[14]](_0x9146xf)};var _0x9146x1d=path[_0x26cd[26]](_0x9146xf[_0x26cd[41]],_0x9146xf[_0x26cd[40]]+_0x26cd[86]+_0x9146xf[_0x26cd[58]]);var _0x9146x1e=path[_0x26cd[26]](_0x9146xf[_0x26cd[42]],_0x9146xf[_0x26cd[40]]+_0x26cd[86]+_0x9146xf[_0x26cd[71]]);return sequelize[_0x26cd[87]](function(_0x9146x1f){return _0x9146xf[_0x26cd[85]]({transaction:_0x9146x1f})[_0x26cd[16]](function(){fs[_0x26cd[54]](_0x9146x1d,function(_0x9146xd){if(_0x9146xd){return handleError(_0x9146xc,_0x9146xd)}});fs[_0x26cd[54]](_0x9146x1e,function(_0x9146xd){if(_0x9146xd){return handleError(_0x9146xc,_0x9146xd)}});return _0x9146xc[_0x26cd[15]](200)[_0x26cd[14]](_0x9146xf);})})[_0x26cd[13]](function(_0x9146xd){return handleError(_0x9146xc,_0x9146xd)});})[_0x26cd[13]](function(_0x9146xd){return handleError(_0x9146xc,_0x9146xd)})};exports[_0x26cd[88]]=function(_0x9146xb,_0x9146xc){Upload[_0x26cd[22]](_0x9146xb[_0x26cd[21]][_0x26cd[20]])[_0x26cd[16]](function(_0x9146xf){if(!_0x9146xf){return _0x9146xc[_0x26cd[15]](404)[_0x26cd[14]](_0x9146xf)};var _0x9146x1d=path[_0x26cd[26]](_0x9146xf[_0x26cd[41]],_0x9146xf[_0x26cd[40]]+_0x26cd[86]+_0x9146xf[_0x26cd[58]]);_0x9146xc[_0x26cd[15]](200)[_0x26cd[88]](_0x9146x1d,_0x9146xf[_0x26cd[37]]+_0x26cd[86]+_0x9146xf[_0x26cd[58]],function(_0x9146xd){if(_0x9146xd){return handleError(_0x9146xc,_0x9146xd)}else {console[_0x26cd[48]](_0x26cd[89],_0x9146x1d)}});})};exports[_0x26cd[90]]=function(_0x9146xb,_0x9146xc){Upload[_0x26cd[22]](_0x9146xb[_0x26cd[21]][_0x26cd[20]])[_0x26cd[16]](function(_0x9146xf){if(!_0x9146xf){return _0x9146xc[_0x26cd[15]](404)[_0x26cd[14]](_0x9146xf)};var _0x9146x1d=path[_0x26cd[26]](_0x9146xf[_0x26cd[42]],_0x9146xf[_0x26cd[40]]+_0x26cd[86]+_0x9146xf[_0x26cd[58]]);base64[_0x26cd[91]](_0x9146x1d,function(_0x9146xd,_0x9146x20){if(_0x9146xd){console[_0x26cd[48]](_0x9146xd);return handleError(_0x9146xc,_0x9146xd);}else {return _0x9146xc[_0x26cd[15]](200)[_0x26cd[14]](_0x9146x20)}});})};function handleError(_0x9146xc,_0x9146xd){return _0x9146xc[_0x26cd[15]](500)[_0x26cd[14]](_0x9146xd)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Upload = require('../../models').Upload;
+var uploadFile = require('upload-file');
+var sr = require('simple-random');
+var sox = require('sox');
+var path = require('path');
+var config = require('../../config/environment');
+var fs = require('fs');
+var sequelize = require('../../models').sequelize;
+var base64 = require('file-base64');
+
+// Get list of uploads
+exports.index = function(req, res) {
+  Upload
+    .findAll()
+    .then(function(uploads) {
+      return res.status(200).send(uploads);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single upload
+exports.show = function(req, res) {
+  Upload
+    .findById(req.params.id)
+    .then(function(upload) {
+      if (!upload) {
+        return res.sendStatus(404);
+      }
+      return res.send(upload);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new upload in the DB.
+exports.create = function(req, res) {
+  var upload = new uploadFile({
+    dest: path.join(config.root, 'server/files/sounds/original'),
+    maxFileSize: 15 * 1000000,
+    maxNumberOfFiles: 10,
+    minNumberOfFiles: 0,
+    acceptFileTypes: /(\.|\/)(wav|mp3|gsm|ogg)$/i,
+    rename: function(name, file) {
+      return sr() + path.extname(file.filename);
+    },
+    messages: {
+      maxNumberOfFiles: "Max number of files upload exceeded",
+      acceptFileTypes: "Only wav,mp3,gsm, and ogg format accepted",
+      maxFileSize: "The maximum file size is 15 Mb",
+      invalidRequest: "Invalid request"
+    }
+  });
+
+  upload.on('end', function(fields, files) {
+    var job_details = {};
+    job_details.description = "";
+    job_details.name = job_details.display_name = path.basename(files.file.path, path.extname(files.file.filename));
+    job_details.save_name = path.basename(files.file.filename, path.extname(files.file.filename));
+    job_details.original_path = path.join(config.root, 'server/files/sounds/original');
+    job_details.converted_path = path.join(config.root, 'server/files/sounds/converted');
+
+    if (!files.file.filename) {
+      return res.status(500).send(upload);
+    }
+
+    var filepath = path.join(job_details.original_path, job_details.save_name + path.extname(files.file.filename));
+    var destination = path.join(job_details.converted_path, job_details.save_name + '.wav');
+    //
+
+    fs.chmodSync(filepath, parseInt('0777', 8));
+    sox.identify(filepath, function(err, result) {
+      console.log('************** Result: ', result);
+    });
+
+    var job = sox.transcode(filepath, destination, {
+      sampleRate: 8000,
+      format: 'wav',
+      channelCount: 1,
+      bitRate: 192 * 1024,
+      compressionQuality: 5,
+    });
+
+
+
+    job.on('error', function(err) {
+      console.error('********** Conversion Error: ', err);
+      fs.unlink(filepath, function(err) {
+        if (err)
+          return handleError(res, err);
+      });
+      return handleError(res, err);
+    });
+
+    job.on('progress', function(amountDone, amountTotal) {
+      // console.log("*********** Progress", amountDone, amountTotal);
+    });
+
+    job.on('src', function(info) {
+      // console.log('********** src: ', info);
+      /* info looks like:
+      {
+        format: 'wav',
+        duration: 1.5,
+        sampleCount: 66150,
+        channelCount: 1,
+        bitRate: 722944,
+        sampleRate: 44100,
+      }
+      */
+      job_details.original_format = info.format;
+      job_details.original_duration = info.duration * 1000;
+      job_details.original_sampleCount = info.sampleCount;
+      job_details.original_channelCount = info.channelCount;
+      job_details.original_bitRate = info.bitRate;
+      job_details.original_sampleRate = info.sampleRate;
+    });
+
+    job.on('dest', function(info) {
+      // console.log('********** dest: ', info);
+      /* info looks like:
+      {
+        sampleRate: 44100,
+        format: 'mp3',
+        channelCount: 2,
+        sampleCount: 67958,
+        duration: 1.540998,
+        bitRate: 196608,
+      }
+      */
+      job_details.converted_format = info.format;
+      job_details.converted_duration = info.duration * 1000;
+      job_details.converted_sampleCount = info.sampleCount;
+      job_details.converted_channelCount = info.channelCount;
+      job_details.converted_bitRate = info.bitRate;
+      job_details.converted_sampleRate = info.sampleRate;
+    });
+
+    job.on('end', function() {
+      console.log("Conversion completed");
+      fs.chmodSync(destination, parseInt('0777', 8));
+      Upload
+        .create(job_details)
+        .then(function(upload) {
+          return res.status(201).send(upload);
+        })
+        .catch(function(err) {
+          console.log(err);
+          return handleError(res, err);
+        });
+    });
+
+    job.start();
+
+  });
+
+  upload.on('error', function(err) {
+    console.log('********** Upload error :', err)
+    return handleError(res, err);
+  });
+
+  upload.parse(req);
+};
+
+// Updates an existing upload in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  Upload
+    .findById(req.params.id)
+    .then(function(upload) {
+      if (!upload) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(upload, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(upload);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a upload from the DB.
+exports.destroy = function(req, res) {
+  Upload
+    .findById(req.params.id)
+    .then(function(upload) {
+      if (!upload) {
+        return res.status(404).send(upload);
+      }
+      var original_filepath = path.join(upload.original_path, upload.save_name + '.' + upload.original_format);
+      var converted_filepath = path.join(upload.converted_path, upload.save_name + '.' + upload.converted_format);
+      return sequelize.transaction(function(t) {
+          return upload.destroy({
+              transaction: t
+            })
+            .then(function() {
+              fs.unlink(original_filepath, function(err) {
+                if (err)
+                  return handleError(res, err);
+              });
+              fs.unlink(converted_filepath, function(err) {
+                if (err)
+                  return handleError(res, err);
+              });
+              return res.status(200).send(upload);
+            })
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+//Download an uploaded file
+exports.download = function(req, res) {
+  Upload
+    .findById(req.params.id)
+    .then(function(upload) {
+      if (!upload) {
+        return res.status(404).send(upload);
+      }
+      var original_filepath = path.join(upload.original_path, upload.save_name + '.' + upload.original_format);
+      res.status(200).download(original_filepath, upload.display_name + '.' + upload.original_format, function(err) {
+        if (err) {
+          return handleError(res, err);
+        } else {
+          console.log("Sent file under :", original_filepath);
+        }
+      });
+    })
+};
+
+//Stream an uploaded file
+exports.stream = function(req, res) {
+  Upload
+    .findById(req.params.id)
+    .then(function(upload) {
+      if (!upload) {
+        return res.status(404).send(upload);
+      }
+      var original_filepath = path.join(upload.converted_path, upload.save_name + '.' + upload.original_format);
+      base64.encode(original_filepath, function(err, base64String) {
+        if (err) {
+          console.log(err);
+          return handleError(res, err);
+        } else {
+          return res.status(200).send(base64String);
+        }
+      });
+    })
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}