diff --git a/package.json b/package.json
index 94ccf471c1bcb396cd23b3135c455055f6ae4212..ee49663181dfbe88f1567fc0f31877f519e1b57e 100644
--- a/package.json
+++ b/package.json
@@ -52,6 +52,7 @@
     "mocha": "^3.5.3",
     "monetdb-pool": "0.0.8",
     "mongoose": "^4.13.17",
+    "multer": "^1.4.5-lts.1",
     "natives": "^1.1.6",
     "nconf": "^0.8.5",
     "node-uuid": "^1.4.8",
diff --git a/src/libs/middlewares/multer.config.js b/src/libs/middlewares/multer.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..d4c7263fcb7c80451d81242186ce3c881a458b69
--- /dev/null
+++ b/src/libs/middlewares/multer.config.js
@@ -0,0 +1,6 @@
+const multer = require('multer');
+
+var storage = multer.memoryStorage()
+var upload = multer({storage: storage});
+
+module.exports = upload;
diff --git a/src/libs/models/file.js b/src/libs/models/file.js
new file mode 100644
index 0000000000000000000000000000000000000000..aa6ba077e60ae1b400e401d470f46aa7f2bc53e3
--- /dev/null
+++ b/src/libs/models/file.js
@@ -0,0 +1,39 @@
+
+const Sequelize = require("sequelize");
+const db = require('../db/postgres.js');
+const libs = `${process.cwd()}/libs`;
+
+var File = db.define("File",{
+    id: {
+        type: Sequelize.STRING,
+        allowNull:false,
+        unique: true,
+        primaryKey: true
+    },
+    type:{
+        type: Sequelize.STRING
+    },
+    name: {
+        type: Sequelize.STRING
+    },
+    data: {
+        type: Sequelize.BLOB('long')
+    }
+},
+{timestamps: false});
+
+File.generateObjectId = function(){
+    var timestamp = (new Date().getTime() / 1000 | 0).toString(16);
+    return timestamp + 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function() {
+        return (Math.random() * 16 | 0).toString(16);
+    }).toLowerCase();
+}
+
+const setObjectId = file => {
+   file.id = File.generateObjectId()
+};
+
+File.beforeCreate(setObjectId);
+
+module.exports=File;
+	
diff --git a/src/libs/routes_v1/file.controller.js b/src/libs/routes_v1/file.controller.js
new file mode 100644
index 0000000000000000000000000000000000000000..06464342676c391e309e061ace568b4390e3515b
--- /dev/null
+++ b/src/libs/routes_v1/file.controller.js
@@ -0,0 +1,41 @@
+var stream = require('stream');
+const libs = `${process.cwd()}/libs`;
+const File = require(`${libs}/models/file`);
+
+exports.uploadFile = async (_file) => {
+	let file = await File.create({
+        id: 0,
+		type: _file.mimetype,
+		name: _file.originalname,
+		data: _file.buffer
+	}).catch(err => {
+		console.log(err);
+		res.json({msg: 'Error', detail: err});
+	});
+	return file.id;
+}
+
+exports.listAllFiles = (req, res) => {
+	File.findAll({attributes: ['id', 'name']}).then(files => {
+	  res.json(files);
+	}).catch(err => {
+		console.log(err);
+		res.json({msg: 'Error', detail: err});
+	});
+}
+
+exports.downloadFile = (req, res) => {
+	File.findByPk(req.params.id).then(file => {
+		var fileContents = Buffer.from(file.data, "base64");
+		var readStream = new stream.PassThrough();
+		readStream.end(fileContents);
+		
+		res.set('Content-disposition', 'attachment; filename=' + file.name);
+		res.set('Content-Type', file.type);
+
+		readStream.pipe(res);
+	}).catch(err => {
+		console.log(err);
+		res.json({msg: 'Error', detail: err});
+	});
+}
diff --git a/src/libs/routes_v1/publication.js b/src/libs/routes_v1/publication.js
index 46b0574d6d7c6c034e7f76ab0b4cd8f8724cda30..81341f32c5fae356530bb34a2d0d952706ed8fe3 100644
--- a/src/libs/routes_v1/publication.js
+++ b/src/libs/routes_v1/publication.js
@@ -18,7 +18,9 @@ const email = require(`${libs}/middlewares/email`);
 
 const passport = require('passport');
 
-const uuid = require('node-uuid');
+const fileWorker = require('./file.controller.js');
+
+let upload = require('../middlewares/multer.config.js');
 
 function emailSyntax(email) {
   const regex = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
@@ -61,19 +63,26 @@ pubApp.get('/:id', (req, res, next) => {
   });
 }, response('publication'));
 
-pubApp.post('/', passport.authenticate('bearer', { session: false }), async (req, res, next) => {
+pubApp.post('/', upload.single('file'), async (req, res, next) => {
+  let _file_id = null
+  if(req.file){
+    _file_id = await fileWorker.uploadFile(req.file);
+    if(!_file_id)
+      console.log("NAO ARQUIVO");}
+  let data = JSON.parse(req.body.data);
+  console.log(data);
   let pb = await Publication.create({
     id: 0,
-    filter: req.body.categoria,
-    title: req.body.title,
-    authors: req.body.autores,
-    organization: req.body.organizacao,
-    year: req.body.ano,
-    text: req.body.texto,
-    link: req.body.link,
-    upload: req.body.upload,
+    filter: data.categoria,
+    title: data.title,
+    authors: data.autores,
+    organization: data.organizacao,
+    year: data.ano,
+    text: data.texto,
+    link: data.link,
+    upload: _file_id,
     is_draft: false,
-    is_homepage: req.body.homepage
+    is_homepage: data.homepage
   }).catch(function (err) {
     log.error(err);
     let errors = [];
@@ -85,13 +94,8 @@ pubApp.post('/', passport.authenticate('bearer', { session: false }), async (req
     return res.json({ err, errors });
     // handle error;
   });
-  let up = await Publication.create({
-    user_id: req.user.id,
-    publication_id: pb.id
-  })
-  req.result = pb.toJSON();
-  next();
-});
+  req.result = pb.toJSON;
+}, response('publication'));
 
 pubApp.post('/rascunho', passport.authenticate('bearer', { session: false }), async (req, res, next) => {
   let pb = await Publication.create({