2013-12-23 2 views
15

это мой метод загрузки в приложение/маршрутов/index.js:Форма загрузки в Node.js + Express (через многопартийность)

exports.uploadFile = function(req, res) { 
var multiparty = require('multiparty'); 
var gm = require('gm'); 
var fs = require('fs'); 
var form = new multiparty.Form(); 
var size = ''; 
var fileName = ''; 
form.on('part', function(part){ 
    if(!part.filename) return; 
    size = part.byteCount; 
    fileName = part.filename; 
}); 
form.on('file', function(name,file){ 
    console.log(file.path); 
    console.log(__dirname); 
    console.log('filename: ' + fileName); 
    console.log('fileSize: '+ (size/1024)); 
    var tmp_path = file.path 
    var target_path = __dirname + '/uploads/fullsize/' + fileName; 
    var thumbPath = __dirname + '/uploads/thumbs/'; 
    fs.renameSync(tmp_path, target_path, function(err) { 
     if(err) console.error(err.stack); 
    }); 
    res.redirect('/uploads/fullsize/' + fileName); 
     console.log(target_path); 
    /*gm(tmp_path) 
     .resize(150, 150) 
     .noProfile() 
     .write(thumbPath + 'small.png', function(err) { 
      if(err) console.error(err.stack);  
     });*/ 
}); 
form.parse(req); 

};

Я называю этот метод из app.js в

app.post('/uploadFile', routes.uploadFile); 

когда я загрузить файл из формы загрузки, это сообщение об ошибке в консоли:

/tmp/9039-1m6kw46.jpg 
/home/danyaloff/Development/nodejs/projects/nodetest1/routes 
filename: 3D-Background-Wallpapers-HD-Wallpapers-in-HD.jpg 
fileSize: 910.255859375 

fs.js:543 
    return binding.rename(pathModule._makeLong(oldPath), 
      ^
    Error: ENOENT, no such file or directory '/tmp/9039-1m6kw46.jpg' 
    at Object.fs.renameSync (fs.js:543:18) 
    at Form.<anonymous> (/home/danyaloff/Development/nodejs/projects/nodetest1/routes/index.js:25:6) 
at Form.EventEmitter.emit (events.js:98:17) 
at WriteStream.<anonymous> (/home/danyaloff/Development/nodejs/projects/nodetest1/node_modules/multiparty/index.js:527:10) 
at WriteStream.EventEmitter.emit (events.js:117:20) 
at fs.js:1596:14 
at Object.oncomplete (fs.js:107:15) 
23 Dec 03:52:59 - [nodemon] app crashed - waiting for file changes before starting... 

, но когда я использую функцию загрузки в мой файл app.js как:

app.post('/uploadFile', function(req, res){ 
    //my upload function 
}); 

все работает отлично. в чем проблема в моем коде? спасибо!

ответ

7

проблема решена после использования:

var target_path = './uploads/fullsize/' + fileName; 

вместо

var target_path = __dirname + '/uploads/fullsize/' + fileName; 
Смежные вопросы