Я пытаюсь использовать filefield
ExtJS для загрузки файла изображения и отправки его в виде form
на серверную часть («Экспресс»). Я вставил свой код ниже:ExtJS filefield form submit to Express & Node.js4
Я пробовал ссылаться API for req.body, но req.body
всегда undefined
. Пожалуйста, дайте мне знать, где я делаю неправильно. Ext JS код
{
xtype: 'form',
name:'imageForm',
items:[{
xtype:'textfield',
name:'name',
value:'Krisna'
},{
xtype: 'filefield',
hidden: false,
buttonOnly:true,
buttonText:'Change Photo',
name: 'imageUrl',
//bind: '{currentContact.imageUrl}',
listeners:{
change:function(fielField, value){
var filePath = value;
fileNameIndex = filePath.lastIndexOf("\\");
fileName = filePath.substring(fileNameIndex + 1);
fileExt = fileName.substring(fileName.lastIndexOf(".") + 1);
var form = this.up('form').getForm(); // working
if(fileExt === 'jpeg' || fileExt === 'jpg' || fileExt === 'gif' || fileExt === 'png'){
if (form.isValid()) {
form.headers = {
'Content-Type' : 'application/json;charset=utf-8',
"Accept" : "application/json;charset=utf-8"
};
form.submit({
url : 'http://localhost:3000/changePhoto',
waitMsg : 'Uploading your Photo...',
success : function (fp, o) {
Ext.Msg.alert('Success', 'Your Photo has been uploaded.');
//Write code here to set the server side image url so that that image gets displayed , but not as fakepath.
},
failure : function (fp, o) {
Ext.Msg.alert('Failed', 'Your Photo failed to uploaded.');
}
});
}
}
else if(value){
//showOKInfoMsg(SWP_Msg.SWP_CompressFileFrmtMsg);
Ext.Msg.alert('Warning', 'Please select Image file only');
this.reset();
return true;
}
}
}
}]
}
Экспресс-код: index.js:
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
router.use(bodyParser.json()); // for parsing application/json
router.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
//var multer = require('multer'); // tried using multer, but I think this is only for file upload not form submit
//var temp = multer();
//router.use(bodyParser());
//router.use(multer()); // If I try adding multer at this line it is throwing error
router.post('/changePhoto', function (req, res) {
console.log(req.body); // Outputting {} i.e., empty object
var userName = req.body.name; // coming undefined as req.body is undefined
res.json(req.body); // sending back {}
});
module.exports = router;
Примечание: Версия Экспресс: "Экспресс": "~ 4.13.1"
Лучший способ заключается в использовании multer. Вы можете отправить другие компоненты и файл формы отдельно. –
Когда я пробовал Линии разметки: var multer = require ('multer'); router.use (multer()); следующее сообщение об ошибке он бросает, "бросить новый TypeError ('Router.use() требуются функции промежуточного'); ^ TypeError: Router.use() требует функции промежуточного слоя." Я уже установил multer – vajrakumar