使用Multer存储对象

我正在使用multer将file upload到服务器。 一切工作正常,除了在multer文件中实际提到的一个问题。 这是一个摘录:

“请注意, req.body可能尚未完全填充”(意思是当存储对象文件名函数被称为我猜…)。 “这取决于客户端传输字段和文件到服务器的顺序”

这正是我的问题所在。 我确实validation了req.body.ID将它传递给服务器,但是在multer定义了文件的名字之后,它被填充了。

有没有人有任何build议如何处理这个问题? 这里是我的代码片段(文件名最后是“Undefined”与正确的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 

我相信req.body.ID是不正确的。 你很可能试图使用req.body.name ? 当我用你的例子,我也得到了Undefined.jpg。 但是使用.name ,我有正确的文件名

晚会可能有点晚,但我遇到了确切的问题。 我通过将文件保存到临时位置来缓解问题,并在callback函数中将所述函数移动(重命名)到所需的位置。