Java Spring启动上传文件并使用表单提交将其他数据作为ajax发送

时间:2015-12-24 08:36:55

标签: java jquery html ajax spring

在我的应用程序中,我需要上传一个文件,然后我需要再发送一个参数。 这是我的客户端代码。

$.ajax({
                url : "/uploadFile",
                type : "POST",

                data: {file_name:new FormData($("#upload-file-form")[0]),"groupName":"xxx"},
                enctype : 'multipart/form-data',
        //      processData : false,
                contentType : false,
                cache : false,

                success : function(data) {
                    if (data == "success") {
                        // alert ("file uploaded successfully")

                        $(".modal-body").html(
                                "<p>File uploaded Successfully</p>")
                        $('#myModal').modal('show');

                    }
                    if (data == "failure") {
                    alert("failure)
                    }
               }
        }

我的服务器端代码:

public String handleFileUpload(@RequestParam(value="file_name") MultipartFile file ,@RequestParam(value="groupName") String name){


    System.out.println("file");
    return "success";
}

但它表示当前请求不是MultiPart请求。 org.springframework.web.multipart.MultipartException:当前请求不是多部分请求

我应该如何解析文件名和其他参数?请帮忙

我的html表单。

<form id="upload-file-form">
  <label for="upload-file-input">Upload your CSV file:</label>
  <input id="upload-file-input" type="file" name="uploadfile" accept="*" class="align-right" />
  <br>

  <input type="submit"  id ="groupUpload" value="click here to upload the file" class="btn btn-info" >
</form>

1 个答案:

答案 0 :(得分:1)

看到你需要在FormData中附加值,这是唯一需要传递的内容。所以你可以附加需要传递的额外值,如下所示:

var fd = new FormData($("#upload-file-form")[0]);
    fd.append('groupName', 'xxx');

现在在ajax中你可以简单地传递一下:

data: fd,
processData : false,  // <----required to upload
contentType : false,  // <----required to upload

FormData().append() doc at MDN.

所以你的代码应该是这样的:

$("#upload-file-form").submit(function(e){
    e.preventDefault();  // <--------stops the form submission
    var fd = new FormData($("#upload-file-form")[0]);
        fd.append('groupName', 'xxx');

    $.ajax({
      url: "/uploadFile",
      type: "POST",
      data: fd,
      enctype: 'multipart/form-data',
      processData: false,
      contentType: false,
      cache: false,
      success: function(data) {
          if (data == "success") {
            $(".modal-body").html("<p>File uploaded Successfully</p>");
            $('#myModal').modal('show');
          } else if (data == "failure") {
            alert("failure)
          }
      }
    });
});

jQuery.ajax() to upload files example @ MDN