我正在使用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
您可能会在客户端添加表单提交的内容(尤其是HTML表单,如果您使用的话)。 – mscdex
好的建议,谢谢,HTML表单很简单,现在添加它 – pastrop
@pastrop:你还可以发布你如何分配上面的存储对象到multer吗?例如: var upload = multer({storage:storage}); app.post('/ profile',upload.single('uploadedFile'),函数( – pkamathk