使用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函数中将所述函数移动(重命名)到所需的位置。