2014-08-14 4 views
1

Я знаю, что этот вопрос задан, но мой ум был взорван моей неспособностью получить эту работу. Я пытаюсь загрузить несколько изображений на моем сервере с помощью следующего кода:Исключительная загрузка нескольких файлов - ENOENT, нет такого файла или каталога

var formidable = require('formidable'); 
var fs = require('fs'); 

...

router.post('/add_images/:showcase_id', function(req, res){ 
    if(!admin(req, res)) return; 
    var form = new formidable.IncomingForm(), 
    files = []; 


    form.uploadDir = global.__project_dirname+"/tmp"; 
    form.on('file', function(field, file) { 
     console.log(file); 

     file.image_id = global.s4()+global.s4(); 
     file.endPath = "/img/"+file.image_id+"."+file.type.replace("image/",""); 
     files.push({field:field, file:file}); 
    }); 
    form.on('end', function() { 
     console.log('done'); 
     console.log(files); 
     db.get("SOME SQL", function(err, image_number){ 
      if(err){ 
       console.log(err); 
      } 
      var db_index = 0; 
      if(image_number) db_index = image_number.image_order; 
      files.forEach(function(file, index){ 
       try{ 
        //this line opens the image in my computer (testing) 
        require("sys").exec("display " + file.file.path); 
        console.log(file.file.path); 
        fs.renameSync(file.file.path, file.file.endPath); 
       }catch (e){ 
        console.log(e); 
       } 
       db.run("SOME MORE SQL"')", function(err){ 
        if(index == files.length) 
         res.redirect("/admin/gallery"+req.params.showcase_id); 
       }); 
      }); 
     }); 
    }); 
    form.parse(req); 
}); 

Линия, которая открывает файл с помощью системных вызовов работает нормально, но я по-прежнему получать : Error: ENOENT, no such file or directory '/home/[username]/[project name]/tmp/285ef5276581cb3b8ea950a043c6ed51' по инструкции переименования.

значение file.file.path является: /home/[username]/[project name]/tmp/285ef5276581cb3b8ea950a043c6ed51

Я так растерялся, и попробовал все. Что я делаю не так?

+0

Возникает вопрос, почему вы получаете 'ENOENT', или почему путь не является каким-то другим значением. Существует ли каталог, о котором он жалуется, существует? – loganfsmyth

+0

Вопрос в том, почему я получаю 'ENOENT'. Каталог существует. Я знаю это, потому что без 'try/catch' сервер выйдет из строя, и поскольку это произойдет до того, как грозное очистит каталог загрузки, файлы все равно будут там. –

+0

Есть ли трассировка стека для ошибки? Просто сообщение об ошибке не работает. – loganfsmyth

ответ

3

Возможно, вы получили эту ошибку, потому что целевой путь не существует или у вас нет прав на запись.

Ошибка вы получаете в заблуждение из-за ошибки в nodejs см:

Рассмотрим добавление:

console.log(file.file.endPath); 

перед fs.renameSync вызова и проверьте, существует ли целевой путь и i s записывается по вашей заявке

+0

О, ничего себе. Спасибо! Это действительно расстраивает. –

Смежные вопросы