使用ajax发送用于文件上载的formdata

时间:2017-10-06 10:04:58

标签: javascript jquery node.js ajax image-uploading

我正在尝试使用带有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进行调用,事情似乎没有正常工作。下面是我用来使用post API调用的代码AJAX。

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函数中检查请求数据时,似乎在请求中,参数名为&#34; files&#34;在后一种情况下不会发送。

3 个答案:

答案 0 :(得分:1)

使用

$("#uploadForm").submit(function () {
      var formData = new FormData(this);
      $.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;
  });

答案 1 :(得分:0)

我认为您必须创建FormData,然后才能将文件附加到formData,将ID添加到输入<input type="file" class="btn btn-default" name="file" id="uploadFile"/>

 $("form#uploadForm").submit(function (event) {
      //disable the default form submission
      event.preventDefault();
      var formData = new FormData();
      formData.append('file',$('#uploadFile')[0].files[0]);
      $.ajax({
          url: '/tab10/uploadImage',
          type: 'POST',
          data: formData,
          contentType: false,
          processData: false,
          success: function () {
              alert('Form Submitted!');
          },
          error: function(){
              alert("error in ajax form submission");
          }
      });

  });

答案 2 :(得分:0)

使用此格式触发ajax。因为文件是multipart或jquery serialize()方法不能序列化多部分内容,所以我们需要手动设置。

//get choosen file
var fileContent = new FormData();
fileContent.append("file",$('input[type=file]')[0].files[0]);
$.ajax({
     type: "POST",
      enctype:"multipart/form-data",
       url: "/tab10/uploadImage",
       data: fileContent,
       processData: false,
       contentType: false,
       success: function(response) {
        }
});