nodejs грозное изменение uploadDir

у меня есть проект, который я пытаюсь закончить, я хочу загружать изображения, я могу загружать изображения, но не в каталог, который предполагается загружать

хорошо, давайте код:

 app.post('/register',function(req,res) 
    {
var form = new formidable.IncomingForm();
form.keepExtensions = true;
form.uploadDir ='./uploaded/';
form
    .on('error', function(err) {
        throw err;
    })

    .on('field', function(field, value) {
        //receive form fields here
    })

    /* this is where the renaming happens */
    .on ('fileBegin', function(name, file){
            //rename the incoming file to the file's name
            file.path = form.uploadDir + "/" + file.name;
    })

    .on('file', function(field, file) {
        //On file received
    })

    .on('progress', function(bytesReceived, bytesExpected) {
        //self.emit('progess', bytesReceived, bytesExpected)

        var percent = (bytesReceived / bytesExpected * 100) | 0;
        process.stdout.write('Uploading: %' + percent + '\r');
    })

    .on('end', function() {


    });

form.parse(req);

проблема в том, что когда я публикую изображение... изображение все еще сохраняется в process.env.TMP, мой проект имеет этот каталог arq

proyect:
    node_modules
    uploaded
    public
    routes
    views
    app.js
    package.json

РЕДАКТИРОВАТЬ 2: ПРОБЛЕМА BODYPARSER

хорошо из последнего кода... проблема заключалась в том, что app.js, когда я настраиваю приложение, имеет bodyParser, так что метод bodyParser использует грозный из экспресс

последний код правильный и функциональный, если кто-то хочет использовать код... просто прокомментируйте строку из express.configure

app.use(express.bodyParser());

отключить экспресс-парсер тела, но экспресс-использование тоже грозно, так что то же самое...

есть еще одна проблема

я настраиваю express.bodyParser следующим образом

  app.use(express.bodyParser(
    {
      uploadDir: './uploads',
      keepExtensions: true
    }));

я изменяю первый код следующим образом

app.post('/register',function(req,res) 
{
  var oldDir=req.files.img.path;
  var newDir='./uploads/'+req.body.email+'/perfil/';

if(req.files)
{
  mkdirp(newDir,0777,function(err){
    if(err) throw err;
  })
}
if(req.files)
{
  fs.rename(oldDir,newDir+req.files.img.name,function(err){
    if(err) throw err;
  });

}
res.send('pow!');

это функционально, и когда этот код получает файл, поместите файл в папку для загрузки, затем создайте папку с именем электронной почты и, наконец, переместите файл в папку электронной почты и переименуйте его, как исходный файл с расширением

Идеально"!

неееет, нет совершенства... я хочу использовать этот метод

.on ('fileBegin', function(name, file){
            //rename the incoming file to the file's name
            file.path = form.uploadDir + "/" + file.name;
    })
    .on('progress', function(bytesReceived, bytesExpected) {
        //self.emit('progess', bytesReceived, bytesExpected)

        var percent = (bytesReceived / bytesExpected * 100) | 0;
        process.stdout.write('Uploading: %' + percent + '\r');
    })

потому что из первого кода я могу настроить, куда поместить файл с самого начала, во втором коде я перемещаю файл после того, как сервер получит файл

я думаю, что метод экспресс, потому что экспресс-использование грозно, как промежуточное ПО

как я могу настроить метод на ??

где метод...?'?

как я могу узнать методы, содержащиеся в req.files из второго кода?? (потому что req.files, использующие bodyParser(), такие же, как form.file, использующие грозный в первом коде)

Спасибо всем


person andrescabana86    schedule 25.07.2012    source источник
comment
Спасибо за вышесказанное, у меня была такая же проблема.   -  person BingeBoy    schedule 13.05.2013


Ответы (2)


Конструктор IncomingForm принимает объект параметров. Вам, вероятно, также потребуется использовать глобальное имя __dirname в своем пути.

var form = new formidable.IncomingForm({ uploadDir: __dirname + '/uploaded' });

Вы можете увидеть, как эта опция применяется в огромном источнике.

person BadCanyon    schedule 25.07.2012
comment
я печатаю console.log(form) и, как вы видите, uploadDir настроен правильно {ошибка: null, end: false, maxFieldsSize: 2097152, keepExtensions: true, uploadDir: './uploaded/', кодировка: 'utf-8' , заголовки: null, тип: null, хэш: false, bytesReceived: null, bytesExpected: null, _parser: null, _flushing: 0, _fieldsSize: 0 } - person andrescabana86; 25.07.2012
comment
Вы пытались использовать __dirname для более точного определения пути к каталогу? - person BadCanyon; 25.07.2012
comment
да, чувак ... спасибо за ответы, я решаю проблему и РЕДАКТирую пост, пожалуйста, прочитайте - person andrescabana86; 25.07.2012

Вы можете сохранить код переименования, когда срабатывает «конец», чтобы он переименовывался после полной загрузки файла.

person user3931138    schedule 04.09.2014