Skip to content

Commit 8fa850a

Browse files
committed
upload
1 parent e6d8d14 commit 8fa850a

File tree

4 files changed

+69
-26
lines changed

4 files changed

+69
-26
lines changed

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

+33-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,18 @@
33
var _ = require('lodash');
44
var File = require('./file.model');
55

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+
618
// Get list of files
719
exports.index = function(req, res) {
820
File.find({'metadata.user':req.user._id})
@@ -24,15 +36,32 @@ exports.show = function(req, res) {
2436
});
2537
};
2638

39+
// Get a single file entity
40+
exports.entity = function(req, res) {
41+
File.findById(req.params.id, function (err, file) {
42+
if(err) { return handleError(res, err); }
43+
if(!file) { return res.status(404).send(''); }
44+
var rs = gfs.createReadStream({
45+
_id: req.params.id
46+
})
47+
rs.pipe(res)
48+
});
49+
};
50+
2751
// Creates a new file in the DB.
2852
exports.create = function(req, res, next) {
2953
console.log(req.file)
30-
File.findById(req.file.id, function (err, file) {
54+
upload.single('file')(req, res, function (err) {
3155
if (err) {
32-
return handleError(err)
56+
return res.status(500).json(err)
3357
}
34-
res.json(file)
35-
})
58+
File.findById(req.file.id, function (err, file) {
59+
if (err) {
60+
return handleError(err)
61+
}
62+
res.json(file)
63+
})
64+
});
3665
};
3766

3867
// Updates an existing file in the DB.

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

+2-13
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,6 @@
33
var express = require('express');
44
var config = require('../../config/environment');
55

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-
186
var auth = require('../../auth/auth.service');
197

208
var controller = require('./file.controller');
@@ -23,9 +11,10 @@ var router = express.Router();
2311

2412
router.get('/', auth.isAuthenticated(), controller.count, controller.index);
2513
router.get('/:id', auth.isAuthenticated(), controller.show);
26-
router.post('/', auth.isAuthenticated(), upload.single('file'), controller.create);
14+
router.post('/', auth.isAuthenticated(), controller.create);
2715
router.put('/:id', auth.isAuthenticated(), controller.update);
2816
router.patch('/:id', auth.isAuthenticated(), controller.update);
2917
router.delete('/:id', auth.isAuthenticated(), controller.destroy);
18+
router.get('/entity/:id', controller.entity);
3019

3120
module.exports = router;

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

+12-4
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,27 @@
55
</template>
66
<script>
77
export default {
8+
props: {
9+
url: {
10+
type: String,
11+
required: true
12+
}
13+
},
814
data () {
915
return {
10-
url: '/api/files'
1116
}
1217
},
1318
methods: {
1419
onChange (e) {
1520
var fd = new FormData()
1621
fd.append('file', e.target.files[0])
1722
this.$http.post(this.url, fd)
18-
.then(() => {})
19-
.catch(() => {})
20-
console.log('on change', e)
23+
.then((response) => {
24+
this.$emit('success', response.body)
25+
})
26+
.catch((err) => {
27+
this.$emit('error', err)
28+
})
2129
}
2230
}
2331
}

Diff for: src/views/Account/Profile.vue

+22-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,29 @@
11
<template>
22
<div class="view-profile container">
3-
<div class="col-sm-4 col-sm-offset-4">
4-
<img src="../../assets/logo.png" alt="" class="img-responsive img-cycle">
5-
<Uploader></Uploader>
6-
</div>
3+
<div class="col-sm-4 col-sm-offset-4">
4+
<img :src="src" alt="" class="img-responsive img-cycle">
5+
<Uploader :url="url" @success="onUploadSuccess" @error="onUploadError"></Uploader>
6+
</div>
77
</div>
88
</template>
99

10-
<script></script>
10+
<script>
11+
export default {
12+
data () {
13+
return {
14+
url: '/api/files',
15+
src: require('../../assets/logo.png')
16+
}
17+
},
18+
methods: {
19+
onUploadSuccess (data) {
20+
this.src = '/api/files/entity/' + data._id
21+
},
22+
onUploadError (err) {
23+
console.log(err)
24+
}
25+
}
26+
}
27+
</script>
1128

1229
<style></style>

0 commit comments

Comments
 (0)