diff --git a/client/components/import/import.controller.js b/client/components/import/import.controller.js index a17caa8..4b36bee 100644 --- a/client/components/import/import.controller.js +++ b/client/components/import/import.controller.js @@ -1,25 +1,25 @@ 'use strict'; angular.module('manticoreApp') .controller('ImportCtrl', function ($scope, FileUploader) { var uploader = new FileUploader({ - url: '/import', + url: '/upload', removeAfterUpload: true, autoUpload: true }); uploader.filters.push({ name: 'sizeFilter', fn: function (item) { return item.size <= 10485760; // 10 Megabytes } }); uploader.filters.push({ name: 'typeFilter', fn: function (item) { return item.type === 'application/vnd.oasis.opendocument.text'; } }); $scope.uploader = uploader; }); diff --git a/package.json b/package.json index 2403f90..34be3dd 100644 --- a/package.json +++ b/package.json @@ -1,90 +1,92 @@ { "name": "manticore", "version": "0.0.0", "main": "server/app.js", "dependencies": { "express": "~4.0.0", "morgan": "~1.0.0", "body-parser": "~1.5.0", "method-override": "~1.0.0", "serve-favicon": "~2.0.1", "cookie-parser": "~1.0.1", "express-session": "~1.0.2", "errorhandler": "~1.0.0", "compression": "~1.0.1", "lodash": "~2.4.1", "jade": "~1.2.0", "mongoose": "~3.8.8", + "gridfs-stream": "1.1.1", "jsonwebtoken": "^0.3.0", "express-jwt": "^0.1.3", "passport": "~0.2.0", "passport-local": "~0.1.6", "composable-middleware": "^0.3.0", - "connect-mongo": "^0.4.1" + "connect-mongo": "^0.4.1", + "multer": "0.1.8" }, "devDependencies": { "grunt": "~0.4.4", "grunt-autoprefixer": "~0.7.2", "grunt-wiredep": "~1.8.0", "grunt-concurrent": "~0.5.0", "grunt-contrib-clean": "~0.5.0", "grunt-contrib-concat": "~0.4.0", "grunt-contrib-copy": "~0.5.0", "grunt-contrib-cssmin": "~0.9.0", "grunt-contrib-htmlmin": "~0.2.0", "grunt-contrib-imagemin": "~0.7.1", "grunt-contrib-jshint": "~0.10.0", "grunt-contrib-uglify": "~0.4.0", "grunt-contrib-watch": "~0.6.1", "grunt-contrib-jade": "^0.11.0", "grunt-google-cdn": "~0.4.0", "grunt-newer": "~0.7.0", "grunt-ng-annotate": "^0.2.3", "grunt-rev": "~0.1.0", "grunt-svgmin": "~0.4.0", "grunt-usemin": "~2.1.1", "grunt-env": "~0.4.1", "grunt-node-inspector": "~0.1.5", "grunt-nodemon": "~0.2.0", "grunt-angular-templates": "^0.5.4", "grunt-dom-munger": "^3.4.0", "grunt-protractor-runner": "^1.1.0", "grunt-asset-injector": "^0.1.0", "grunt-karma": "~0.8.2", "grunt-build-control": "DaftMonk/grunt-build-control", "grunt-mocha-test": "~0.10.2", "grunt-contrib-stylus": "latest", "jit-grunt": "^0.5.0", "time-grunt": "~0.3.1", "grunt-express-server": "~0.4.17", "grunt-open": "~0.2.3", "open": "~0.0.4", "jshint-stylish": "~0.1.5", "connect-livereload": "~0.4.0", "karma-ng-scenario": "~0.1.0", "karma-firefox-launcher": "~0.1.3", "karma-script-launcher": "~0.1.0", "karma-html2js-preprocessor": "~0.1.0", "karma-ng-jade2js-preprocessor": "^0.1.2", "karma-jasmine": "~0.1.5", "karma-chrome-launcher": "~0.1.3", "requirejs": "~2.1.11", "karma-requirejs": "~0.2.1", "karma-coffee-preprocessor": "~0.2.1", "karma-jade-preprocessor": "0.0.11", "karma-phantomjs-launcher": "~0.1.4", "karma": "~0.12.9", "karma-ng-html2js-preprocessor": "~0.1.0", "supertest": "~0.11.0", "should": "~3.3.1" }, "engines": { "node": ">=0.10.0" }, "scripts": { "start": "node server/app.js", "test": "grunt test", "update-webdriver": "node node_modules/grunt-protractor-runner/node_modules/protractor/bin/webdriver-manager update" }, "private": true } diff --git a/server/api/upload/index.js b/server/api/upload/index.js new file mode 100644 index 0000000..0c777a5 --- /dev/null +++ b/server/api/upload/index.js @@ -0,0 +1,46 @@ +'use strict'; + +var express = require('express'); +var multer = require('multer'); +var _ = require('lodash'); +var Grid = require('gridfs-stream'); +var mongoose = require('mongoose'); +var Document = require('../document/document.model'); + + +var gfs = Grid(mongoose.connection.db, mongoose.mongo); +var router = express.Router(); + +router.post('/', function (req, res, next) { console.log('here'); next(); }, multer({ + upload: null, + limits: { + fileSize: 1024 * 1024 * 20, // 20 Megabytes + files: 5 + }, + onFileUploadStart: function (file) { + var newDocument = new Document({ + name: file.originalname + }); + this.upload = gfs.createWriteStream({ + _id: mongoose.Types.ObjectId(newDocument._id), + filename: file.originalname, + mode: 'w', + chunkSize: 1024 * 4, + content_type: file.mimetype, + root: 'fs' + }); + this.upload.on('finish', function () { + newDocument.save(); + }); + }, + onFileUploadData: function (file, data) { + this.upload.write(data); + }, + onFileUploadComplete: function (file) { + this.upload.end(); + } +}), function (req, res) { + res.status(200).send("OK"); +}); + +module.exports = router; diff --git a/server/routes.js b/server/routes.js index fd38254..13db8a5 100644 --- a/server/routes.js +++ b/server/routes.js @@ -1,26 +1,27 @@ /** * Main application routes */ 'use strict'; var errors = require('./components/errors'); module.exports = function(app) { // Insert routes below app.use('/api/documents', require('./api/document')); app.use('/api/users', require('./api/user')); + app.use('/upload', require('./api/upload')); app.use('/auth', require('./auth')); // All undefined asset or api routes should return a 404 app.route('/:url(api|auth|components|app|bower_components|assets)/*') .get(errors[404]); // All other routes should redirect to the index.html app.route('/*') .get(function(req, res) { res.sendfile(app.get('appPath') + '/index.html'); }); };