无法通过 Ajax JAVA 传递 MultipartFile

Can't Pass MultipartFile through Ajax JAVA

我正在尝试通过 ajax 将文件从我的 jsp 发送到控制器,我收到 EXCEPTION:Null 错误,下面是我的代码:

控制器:

@RequestMapping(value = "/schedulebatch",method = 
RequestMethod.POST,params="insertData")
public @ResponseBody String addBatch(@RequestParam(
@RequestParam(value="upfile",required=false) MultipartFile upfile) throws 
Exception {  if(!upfile.isEmpty()){
                    System.out.println("test1");}

查看:

 $("#submit-btn").click(function(){
 
 
 var upfile = document.getElementById('upfile').enctypeVIEW;
    alert('test');
 if(batchname==null || fromdate == null || partners == null || interval == 
    null){
  $('#insertmodalalert').empty();
     $('#insertmodalalert').append('<div class="alert alert-info"><strong 
    >NOTICE |</strong> Please fill out the required form. </div>');
     $('#alertMod').modal();
     $('#okbtn').click(function(){
      window.location.reload(true);
     });
 }
 else{
  
  $.ajax({
   
   type: "POST",
   url: "schedulebatch?insertData",
   data: {"upfile" : upfile},

           
           success: function(response){
      // alert('test');
            $('#insertmodalalert').empty();
            $('#insertmodalalert').append('<div class="alert alert- 
   info"><strong >NOTICE |</strong> '+response+' </div>');
            $('#alertMod').modal();
            $('#okbtn').click(function(){
             $('#alertMod').modal('hide');
             window.location.reload(true);
            });
           },           
           error: function(xhr, status, error) {
              
              var err = eval("(" + xhr.responseText + ")");
            // alert('test');
              // Display the specific error raised by the server 
    (e.g. not a
              //   valid value for Int32, or attempted to divide by 
    zero).
              $('#insertmodalalert').append('<div class="alert 
    alert-danger"><strong >NOTICE |</strong> '+err.Message+'</div>');
             $('#activateMod').modal();
             
             $('#okbtn').click(function(){
              $('#alertMod').modal('hide');
              window.location.reload(true);
             });
           }     
       });
  //alert("Test");
 }

HTML:

 File to upload: <input class="form-control" type="file" name="upfile" 
    accept=".csv" id="upfile">
<button type="submit" class="btn btn-success" id="submit- 
   btn">Submit</button>

我将代码缩小到唯一给我错误的地方,在此先感谢。它成功获取了 Multipart 文件,但我不确定为什么会出现空异常错误

当我在 Spring 引导中使用我的 RestController 上传文件时,我使用如下所示,一切都很好:

@PostMapping
public ResponseEntity<User> post(UserCreateRequest request, @RequestPart("file") MultipartFile file) throws IOException {
    ftpService.uploadPhoto(file.getOriginalFilename(), file.getInputStream());

     return ResponseEntity.ok(userService.create(request));
 }

所以您可以尝试如下更改代码:

@RequestMapping(value = "/schedulebatch",method = 
RequestMethod.POST,params="insertData")
public @ResponseBody String addBatch(@RequestPart("upfile") MultipartFile upfile) throws Exception {  
    if(!upfile.isEmpty()){
        System.out.println("test1");
    }
}

你的内容类型应该是 multipart/form-data 所以我添加了一个示例 html&ajax 表单请求:

<html>

    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

        <script>
            $(document).ready(function () {

                $('#btnSubmit').click( function(e) {
                    e.preventDefault();

                    var form = $('#my-form')[0];
                    var data = new FormData(form);

                    $.ajax({
                        type: "POST",
                        enctype: 'multipart/form-data',
                        url: "http://localhost:8080/schedulebatch",
                        data: data,
                        processData: false,
                        contentType: false,
                        cache: false,
                        timeout: 600000,
                        success: function (data) {
                            alert("success")
                        },
                        error: function (e) {
                            alert("ERROR : ", e);
                        }
                    });
                });
            });

        </script>

    </head>

    <body>

        <form method="POST" enctype="multipart/form-data" id="my-form">
            <input type="file" name="upfile"/><br/><br/>
            <input type="submit" value="Submit" id="btnSubmit"/>

        </form>

    </body>

</html>