mirror of
https://github.com/cnodejs/nodeclub.git
synced 2025-12-08 19:55:55 +00:00
56 lines
1.4 KiB
JavaScript
56 lines
1.4 KiB
JavaScript
var fs = require('fs');
|
|
var path = require('path');
|
|
var config = require('../config').config;
|
|
var EventProxy = require('eventproxy').EventProxy;
|
|
|
|
var mod = require('express/node_modules/connect/node_modules/formidable');
|
|
var upload_path = process.cwd() + '/public/user_data/images/';
|
|
mod.IncomingForm.UPLOAD_DIR = upload_path;
|
|
|
|
exports.upload_image = function(req,res,next) {
|
|
if (!req.session || !req.session.user) {
|
|
res.send('forbidden!');
|
|
return;
|
|
}
|
|
|
|
var file = req.files.userfile;
|
|
// sould use async
|
|
if (file) {
|
|
var name = file.name;
|
|
var ext = name.substr(name.lastIndexOf('.'),4);
|
|
var uid = req.session.user._id.toString();
|
|
var time = new Date().getTime();
|
|
var new_name = uid + time + ext;
|
|
var proxy = new EventProxy();
|
|
function ensureDir() {
|
|
path.exists(upload_path + uid, function(exists) {
|
|
if (!exists) {
|
|
fs.mkdir(upload_path + uid, function(err) {
|
|
if (err) {
|
|
return next(err);
|
|
}
|
|
proxy.emit('ensureDir');
|
|
})
|
|
} else {
|
|
proxy.emit('ensureDir');
|
|
}
|
|
})
|
|
}
|
|
function moveImg() {
|
|
var new_path = upload_path + uid +'/' +new_name;
|
|
fd.rename(file.path, new_path, function(err) {
|
|
if (err) {
|
|
return next(err);
|
|
}
|
|
var url = config.host + '/user_data/images/'+ uid + '/' +new_name;
|
|
res.json({status:'success',url: url});
|
|
})
|
|
}
|
|
proxy.once('ensureDir', moveImg);
|
|
ensureDir();
|
|
} else {
|
|
res.json({status:'failed'});
|
|
return;
|
|
}
|
|
};
|