2015-08-15 3 views
2

Я использую multer для загрузки файлов на сервер. Все работает нормально, за исключением одной проблемы, которая фактически упоминается в документации multer. Вот отрывок:Использование объекта хранения Multer

«Обратите внимание, что req.body, возможно, не были полностью не заселен» (то есть, когда функция объекта имя файла для хранения называется я думаю ...). «Это зависит от того, что клиент передает поля и файлы на сервер»

Это именно то, где моя проблема. Я проверил, что req.body.ID делает его сервером, но он заполняется после того, как multer определяет имя файла.

Есть ли у кого-нибудь предложения по решению этой проблемы? Вот мои фрагменты кода (имя файла заканчивается время "Не определено" с правильным расширением JPG):

//Storage object 
var storage = multer.diskStorage({ 
    destination: './uploaded', 
    filename: function(req, res, cb) { 
    cb(null, req.body.ID + '.jpg') 
    } 
}); 

//File Upload Handle 
router.post('/file-upload', upload.single('image'), function(req, res, next) { 
    console.log("routes module-/file-upload " + req.body.ID); // The file ID gets transmitted 
    res.sendStatus(201); 
}); 

Вот мой HTML:

<form id="fileForm" enctype="multipart/form-data" > 

    <div class="form-group"> 
     <input id='name' name="name" placeholder="ID" class="form-control-label"> 
    </div> 

    <div class="form-group" align="center"> 
     <input type="file" id="file" name="image"> 
    </div> 

<button type="submit" class="btn btn-warning" value="Upload">Upload</button> 

</form> 

и фронтального AJAX:

//Testing Files Uploads 
$("#fileForm").on('submit', function(event) { 
    event.preventDefault(); 
    var formData = new FormData(this); 
    var fileID = $('#name').val(); 
    formData.append("ID", fileID); 

    $.ajax('/file-upload', { 
     type: 'POST', 
     data: formData, 
     processData: false, 
     contentType: false, 
    }) 
    .done(function(item) { 
     console.log('Uploaded!'); 
    }) 
    .error(function() { 
     console.log('doesnt work!') 
    }); 
}); 

//End of Files Uploads 
+0

Вы можете добавить, как выглядит ваша форма представления на стороне клиента (особенно форма HTML, если вы используете это). – mscdex

+0

Хорошее предложение, спасибо, форма HTML довольно проста, добавив его сейчас – pastrop

+0

@pastrop: Не могли бы вы также опубликовать, как вы назначаете объект хранения выше, чтобы обманывать? например: var upload = multer ({storage: storage}); app.post ('/ profile', upload.single ('uploadedFile'), функция ( – pkamathk

ответ

0

Я считаю, что req.body.ID является неправильным. Вполне возможно, что вы пытались использовать req.body.name? Когда я использовал ваш пример, я также получил Undefined.jpg. Но используя .name, я получил правильное имя файла

0

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

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