Skip to content

Commit e6d8d14

Browse files
committed
upload
1 parent 84bb896 commit e6d8d14

File tree

9 files changed

+160
-10
lines changed

9 files changed

+160
-10
lines changed

Diff for: .eslintrc.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module.exports = {
1818
},
1919
globals: {
2020
localStorage: true,
21-
location: true
21+
location: true,
22+
FormData: true
2223
}
2324
}

Diff for: server/api/file/file.controller.js

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
'use strict';
2+
3+
var _ = require('lodash');
4+
var File = require('./file.model');
5+
6+
// Get list of files
7+
exports.index = function(req, res) {
8+
File.find({'metadata.user':req.user._id})
9+
.sort('-uploadDate')
10+
.skip(req.range.first)
11+
.limit(req.range.last-req.range.first+1)
12+
.exec(function (err, files) {
13+
if(err) { return handleError(res, err); }
14+
return res.status(200).json(files);
15+
});
16+
};
17+
18+
// Get a single file
19+
exports.show = function(req, res) {
20+
File.findById(req.params.id, function (err, file) {
21+
if(err) { return handleError(res, err); }
22+
if(!file) { return res.status(404).send('Not Found'); }
23+
return res.json(file);
24+
});
25+
};
26+
27+
// Creates a new file in the DB.
28+
exports.create = function(req, res, next) {
29+
console.log(req.file)
30+
File.findById(req.file.id, function (err, file) {
31+
if (err) {
32+
return handleError(err)
33+
}
34+
res.json(file)
35+
})
36+
};
37+
38+
// Updates an existing file in the DB.
39+
exports.update = function(req, res) {
40+
res.send('')
41+
};
42+
43+
// Deletes a file from the DB.
44+
exports.destroy = function(req, res) {
45+
gfs.remove({_id:req.params.id}, function (err, file) {
46+
if(err) { return handleError(res, err); }
47+
return res.send('');
48+
});
49+
};
50+
51+
exports.count = function(req, res, next) {
52+
File.count({}, function(err, count){console.log('file count:', count)
53+
res.range({first:req.range.first,last:req.range.last,length:count});
54+
next();
55+
})
56+
};
57+
58+
function handleError(res, err) {
59+
return res.status(500).send(err);
60+
}

Diff for: server/api/file/file.model.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'use strict';
2+
3+
var mongoose = require('mongoose'),
4+
Schema = mongoose.Schema;
5+
6+
// var FileSchema = new Schema({
7+
// filename: String,
8+
// fieldname: String,
9+
// originalname: String,
10+
// encoding: String,
11+
// mimetype: String,
12+
// type: String,
13+
// size: Number,
14+
// destination: String,
15+
// path: String,
16+
// active: Boolean
17+
// });
18+
19+
var FileSchema = new Schema({}, {strict: false});
20+
var FileModel = mongoose.model('File', FileSchema, 'fs.files');
21+
22+
FileModel.ensureIndexes({'metadata.user':1});
23+
24+
module.exports = FileModel;

Diff for: server/api/file/file.spec.js

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
'use strict';
2+
3+
var should = require('should');
4+
var app = require('../../app');
5+
var request = require('supertest');
6+
7+
describe('GET /api/files', function() {
8+
9+
it('should respond with JSON array', function(done) {
10+
request(app)
11+
.get('/api/files')
12+
.expect(200)
13+
.expect('Content-Type', /json/)
14+
.end(function(err, res) {
15+
if (err) return done(err);
16+
res.body.should.be.instanceof(Array);
17+
done();
18+
});
19+
});
20+
});

Diff for: server/api/file/index.js

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
'use strict';
2+
3+
var express = require('express');
4+
var config = require('../../config/environment');
5+
6+
var mongoose = require('mongoose');
7+
var Grid = require('gridfs-stream');
8+
var multer = require('multer');
9+
var gfs = Grid(mongoose.connection.db, mongoose.mongo);
10+
var storage = require('multer-gridfs-storage')({
11+
gfs:gfs,
12+
metadata: function(req, file, cb){
13+
cb(null, {user:req.user._id});
14+
}
15+
});
16+
var upload = multer({ storage: storage });
17+
18+
var auth = require('../../auth/auth.service');
19+
20+
var controller = require('./file.controller');
21+
22+
var router = express.Router();
23+
24+
router.get('/', auth.isAuthenticated(), controller.count, controller.index);
25+
router.get('/:id', auth.isAuthenticated(), controller.show);
26+
router.post('/', auth.isAuthenticated(), upload.single('file'), controller.create);
27+
router.put('/:id', auth.isAuthenticated(), controller.update);
28+
router.patch('/:id', auth.isAuthenticated(), controller.update);
29+
router.delete('/:id', auth.isAuthenticated(), controller.destroy);
30+
31+
module.exports = router;

Diff for: server/app.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ if(config.seedDB) { require('./config/seed'); }
2121
// Setup server
2222
var app = express();
2323
var server = require('http').createServer(app);
24-
var socketio = require('socket.io')(server, {
25-
serveClient: (config.env === 'production') ? false : true,
26-
path: '/socket.io-client'
27-
});
28-
require('./config/socketio')(socketio);
24+
// var socketio = require('socket.io')(server, {
25+
// serveClient: (config.env === 'production') ? false : true,
26+
// path: '/socket.io-client'
27+
// });
28+
// require('./config/socketio')(socketio);
2929
require('./config/express')(app);
3030
require('./config/rbac')(app);
3131
require('./routes')(app);

Diff for: server/package.json

+5-2
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,15 @@
1313
"errorhandler": "^1.4.0",
1414
"express": "^4.12.4",
1515
"express-session": "^1.11.3",
16+
"gridfs-stream": "^1.1.1",
1617
"lodash": "^3.10.1",
1718
"method-override": "~1.0.0",
1819
"mongoose": "^4.1.1",
1920
"mongoose-pagination": "^1.0.0",
2021
"morgan": "~1.0.0",
22+
"multer": "^1.2.0",
23+
"multer-gridfs": "^0.0.1",
24+
"multer-gridfs-storage": "^1.0.0",
2125
"passport": "^0.2.2",
2226
"passport-facebook": "latest",
2327
"passport-google-oauth": "latest",
@@ -28,8 +32,7 @@
2832
"socket.io": "^1.3.6",
2933
"socket.io-client": "^1.3.5"
3034
},
31-
"devDependencies": {
32-
},
35+
"devDependencies": {},
3336
"engines": {
3437
"node": ">=0.10.0"
3538
},

Diff for: server/routes.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ var errors = require('./components/errors');
99
module.exports = function(app) {
1010

1111
// Insert routes below
12-
app.use('/api/things', require('./api/thing'));
12+
app.use('/api/files', require('./api/file'));
1313
app.use('/api/users', require('./api/user'));
1414

1515
app.use('/auth', require('./auth'));

Diff for: src/components/Uploader/index.vue

+12-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
11
<template>
22
<div class="component-uploader">
3-
<input type="file" name="" id="">
3+
<input type="file" name="file" @change="onChange($event)">
44
</div>
55
</template>
66
<script>
77
export default {
88
data () {
99
return {
10+
url: '/api/files'
11+
}
12+
},
13+
methods: {
14+
onChange (e) {
15+
var fd = new FormData()
16+
fd.append('file', e.target.files[0])
17+
this.$http.post(this.url, fd)
18+
.then(() => {})
19+
.catch(() => {})
20+
console.log('on change', e)
1021
}
1122
}
1223
}

0 commit comments

Comments
 (0)