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

标签 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";
}

但是它说当前请求不是多部分请求。 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>

最佳答案

请注意,您需要在 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

关于Java Spring引导上传文件并使用表单提交将其他数据作为ajax发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34449714/

相关文章:

java - 如何在 fragment 内制作抽屉导航?

java - Spring Boot中的Mockito不模拟对象

javascript - 使用 Jquery 的点击事件未开始下载

jquery - 如何删除焦点输入的默认值

javascript - 如何在裁剪 HTML5 Canvas/JavaScript 后从图像中删除透明空白?

javascript - 动态添加事件类

java - 为在 yarn 模式下运行的每个 spark 作业配置 log4j

java - (var) 无法解析为类型

javascript - 使用 setInterval() 函数使图像闪烁

javascript - 单击动画后如何在不影响样式的情况下将 div 堆栈放在页面底部