Skip to content

Commit

Permalink
Merge pull request cnodejs#4 from dead-horse/master
Browse files Browse the repository at this point in the history
修改upload_image为异步
  • Loading branch information
fengmk2 committed Mar 3, 2012
2 parents 21107c5 + ae352c4 commit 8c4d01a
Showing 1 changed file with 33 additions and 12 deletions.
45 changes: 33 additions & 12 deletions controllers/upload.js
@@ -1,33 +1,54 @@
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){
exports.upload_image = function(req,res,next) {
if (!req.session || !req.session.user) {
res.send('forbidden!');
return;
}

var file = req.files.userfile;
if(file){
// 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;
try{
fs.realpathSync(upload_path + uid)
}catch(err){
fs.mkdirSync(upload_path + uid);
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');
}
})
}
var new_path = upload_path + uid +'/' +new_name;
fs.renameSync(file.path, new_path);
var url = config.host + '/user_data/images/'+ uid + '/' +new_name;
res.json({status:'success',url: url});
}else{
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;
}
Expand Down

0 comments on commit 8c4d01a

Please sign in to comment.