UNPKG

candy

Version:

a micro bbs system based on duoshuo.com apis

59 lines (56 loc) 2.33 kB
// POST /media -> create // GET /media/:media -> show exports = module.exports = function(ctrlers, theme) { var media = ctrlers.media; return { // API: 创建媒体文件 create: function(req, res, next) { if (!res.locals.user) return next(new Error('signin required')); if (!req.files.media) return next(new Error('404')); // 能否将这个path更友好的组织起来? var originFile = req.files.media, path = originFile.path; var file = { name: originFile.name, type: originFile.type, src: path, url: path.substr(path.lastIndexOf('/uploads')), user: res.locals.user._id, meta: { size: originFile.size, lastModifiedDate: originFile.lastModifiedDate } }; media.create(file, function(err, baby) { if (err) return next(err); res.json({ stat: 'ok', file: baby }); }); }, // FILE: 下载媒体文件 // TODO: 这里还要控制一个如果保存在云上的话,要重定向到云,或者从云上拿下来返回 show: function(req, res, next) { if (!req.params.media) return next(new Error('404')); media.findById(req.params.media, function(err, file) { if (err) return next(err); if (!file) return next(new Error('404')); if (file.stat == 'public') { media.countDownload(file, function(err, f) { if (err) return next(err); res.download(file.src, file.name); }); } else { // 这里要扩充判断逻辑 // 比如需要注册分享,需要分享分享等等 if (!res.locals.user) return next(new Error('403')); media.countDownload(file, function(err, f) { if (err) return next(err); res.download(file.src); }); } }) } } }