san*_*h_p 5 javascript jquery form-data ajaxform node.js
我想通过 jQuery 请求发送文件post。我的 node.js 将读取该文件并插入data到 Mongodb 中。
这是我的 node.js 函数:
upload: function(req, res){
var FileName;
req.file('myFile').upload(function(err,files){
var i = 1;
if(err) return res.serverError(err);
FileName = files[0].filename; ......
Run Code Online (Sandbox Code Playgroud)
post如果直接从html以下位置发送请求,上述函数可以正常工作:
<form method="post" action="/indi id="indiform" enctype="multipart/form-data">
<input type="file" name="myFile" id="myIndifile"/>
<input type="submit" id="indisubmitbutton" value="Submit" name="upload" class="btn btn-primary" id = "uploadFile"/>
</form>
Run Code Online (Sandbox Code Playgroud)
现在我想提交post来自 jQuery 的请求并将响应处理data为:
var file = $("#myIndifile")[0].files[0];
$.ajax({
type: 'post',
url: '/indi',
async: false,
data: JSON.stringify({ myFile:file }),
contentType: "application/json",
success: function (data) {
alert(" Number of lines Read :"+data[0].lines+"\n"+"Number of records saved:"+data[1].saved);
}
});
Run Code Online (Sandbox Code Playgroud)
这是投掷 Cannot read property 'filename' of undefined at FileName = files[0].filename error。
如果我发送这样的请求:
var file = $("#myIndifile")[0].files[0];
var formdata = new FormData();
formdata.append("myFile", file);
$.ajax({
type: 'post',
url: '/indi',
data: formdata,
contentType: "multipart/form-data",
success: function (data) {
Pace.stop;
alert(" Number of lines Read :"+data[0].lines+"\n"+"Number of records saved:"+data[1].saved);
}
});
Run Code Online (Sandbox Code Playgroud)
JavaScript抛出 Uncaught TypeError: Illegal invocation error.
post如果我从 html发送请求,一切正常。
如何post从具有文件内容的 jQuery 发送请求?
第二个代码片段的问题是您设置的内容类型不正确,多部分表单数据需要边界。但是,当您将 FormData 对象传递给 $.ajax 时,如果您将 contentType 和 processData 设置为 false,它会为您设置正确的内容类型和边界。
var file = $("#myIndifile")[0].files[0];
var formdata = new FormData();
formdata.append("myFile", file);
$.ajax({
type: 'post',
url: '/indi',
data: formdata,
contentType: false,
processData: false,
success: function (data) {
Pace.stop;
alert(" Number of lines Read :"+data[0].lines+"\n"+"Number of records saved:"+data[1].saved);
}
});
Run Code Online (Sandbox Code Playgroud)