【发布时间】:2018-03-18 02:43:33
【问题描述】:
我正在尝试通过使用带有 ajax 的表单数据来上传图像。虽然下面的行似乎工作正常并将图像保存在我的本地机器上。
<form ref='uploadForm' id='uploadForm' action='/tab10/uploadImage' method='post' encType="multipart/form-data">
<input type="file" class="btn btn-default" name="file" />
<input type='submit' class="btn btn-default" value='Broadcast Image' />
</form>
但是,当我没有将操作指定为表单属性时,我尝试使用 ajax 进行调用,事情似乎并不正常。下面是我用来使用 ajax 进行 post API 调用的代码。
HTML
<form ref='uploadForm' id='uploadForm' encType="multipart/form-data">
jQuery
$("form#uploadForm").submit(function (event) {
//disable the default form submission
event.preventDefault();
var formData = $(this).serialize();
console.log(formData);
$.ajax({
url: '/tab10/uploadImage',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function () {
alert('Form Submitted!');
},
error: function(){
alert("error in ajax form submission");
}
});
return false;
});
下面是我用来保存图像的代码。
exports.uploadImage = function(req, resp) {
var res = {};
let file = req.files.file;
file.mv('./images/image', function(err) {
if (err) {
res.status = 500;
res.message = err;
// return res.status(500).send(err);
return resp.send(res);
}
res.status = 200;
res.message = 'File uploaded!';
return resp.send(res);
});
};
当我在uploadimage函数中检查请求数据时,似乎在请求中,在后一种情况下没有发送名为“files”的参数。
【问题讨论】:
-
尝试使用完整的网址。
-
仅供参考:
async: false,主线程中的同步请求已被弃用 - 避免它 -
parameter called "files" is not being send in the later case不看表格,真是个谜 -
但是请求被发送到uploadimage函数,那么如何指定完整的url会有任何用处。 @HimanshuUpadhyay
-
哦好的@SrijanSharma
标签: javascript jquery node.js ajax image-uploading