pac*_*pac 5 javascript node.js
我想将一些属性和文件发送到具有multipart / form-data的Node JS应用程序。
客户端HTML表单:
<input id="picName" name="picName" class="form-control" placeholder="PicTitle..." style="border-radius: 1%; margin: 1%" type="name">
<form id="frmUploader" enctype="multipart/form-data" action="/post/picture/" method="post">
<input id="file" type="file" name="picUploader" multiple /><br>
<input class="btn btn-md btn-success" type="submit" name="submit" id="btnSubmit" value="Upload" /><br>
</form>
Run Code Online (Sandbox Code Playgroud)
客户端JS:
$('#frmUploader').submit(function () {
var username = localStorage.getItem("userName");
var categoryName = $( "#categoryAddPic option:selected").text();
var picTitle = $('#picName').val();
var picture = $('input[name="picUploader"]').get(0).files[0];
var formData = new FormData();
formData.append('picture', picture);
formData.append('username', username);
formData.append('categoryName', categoryName);
formData.append('picTitle', picTitle);
$.ajax({
method: 'POST',
url: 'http://localhost:3000/post/picture',
data: formData,
headers:{
"Authorization": "bearer " + token
},success:function (respond) {
...
});
}
return false;
});
Run Code Online (Sandbox Code Playgroud)
现在,我想将表单数据保存在我的Node应用程序中。如果也有必要知道,我正在使用multer将文件保存在服务器上。
感谢帮助。
PS:节点版本为4.8.3
节点JS:
app.post('/post/picture',function (req, res, next) {
var picName = req.body.picName;
var username = req.body.username;
var displayPic = req.body.displayPic;
var createdAt = moment();
var updatedAt = moment();
var categoryName = req.body.categoryName;
var picIdForCat = null;
try {
if (username) {
upload(req, res, function (err) {
if (err) {
return res.end("Something went wrong!");
}
//return res.end("File uploaded sucessfully!.");
picName = pictureSaveFormat;
var pictureCont = "./pictures/" + picName + ".jpg";
User.findOne({
where: {username: username}
}).then(function (user) {
var picture = {
picName: picName,
picture: pictureCont,
displayPic: null,
createdAt: createdAt,
updatedAt: updatedAt,
UserIdUser: user.idUser
};
Pictures.create(picture);
if (categoryName) {
Pictures.findOne({
where: {picName: picture.picName}
}).then(function (pic) {
picIdForCat = pic.idPic;
Category.findOne({
where: {categoryName: categoryName}
}).then(function (category) {
var catId = category.idCat;
var catForPic = {PictureIdPic: picIdForCat, CategoryIdCat: catId};
CategorieForPic.create(catForPic);
//res.redirect('localhost:3000/index.Admin.html');
res.status(200).json({message: "Picture from: " + username + " with name: " + picName + " created with " + category.categoryName + "."});
})
}).catch(function (req, res, err) {
res.status(500).json({message: "Error: Adding Category to pic", reason: err});
});
} else {
//res.redirect('localhost:3000/index.Admin.html');
res.status(200).json({message: "Picture from: " + username + " with name: " + picName + " created without a category."});
}
}).catch(next);
});
} else {
res.status(404).json({message: "Not found.", reason: "A required parameter is missing."});
}
}catch (err){
res.status(500).json({message: "Fatal Server error: ", reason: err});
}
});
Run Code Online (Sandbox Code Playgroud)
当将 FormData 对象与 jQuery.ajax 一起使用时,必须将 processData 设置为 false,以便 jQuery 不会尝试将 FormData 对象和 contentType 编码为 false,以便 jQuery 不会设置任何内容类型标头。当 FormData 与 ajax 一起使用时,会为您生成正确的内容类型标头。
$.ajax({
method: 'POST',
url: 'http://localhost:3000/post/picture',
data: formData,
processData: false,
contentType: false,
headers:{
"Authorization": "bearer " + token
},
success:function (respond) {
...
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1232 次 |
| 最近记录: |