Spring boot: запрос был отклонен, так как в весенней загрузке с вызовом ajax не было найдено многочастной границы? - PullRequest
0 голосов
/ 29 января 2019

Я работаю с Spring boot.Я хочу загрузить файл вместе с некоторыми данными, используя вызов AJAX.Однако, когда я ввожу данные, выбираю файл и нажимаю кнопку отправки, я получаю следующее исключение:

org.apache.tomcat.util.http.fileupload.FileUploadException: запрос былотклонено, поскольку не найдено многочастной границы

<form  id="course-form" enctype="multipart/form-data">
  <input type="text" class="form-control" placeholder="Course Name" name="courseName" id="courseName">
  <input type="text" class="form-control" placeholder="Total no of sets" name="noOfSets" id="noOfSets">
  <input type="text" class="form-control" placeholder="Total fees" name="fees" id="fees">
  <input type="file" class="form-control" placeholder="Select an image" name="image" id="image">
  <input type="text" name="requirements" id="requirements" class="form-control">
  <input type="text" name="requirements" id="requirements" class="form-control">
  <input type="button" value="Add more requirements" id="add-req">
  <input type="submit" value="Submit">
</form>

ajax call

function saveCourse(){
             var itemData=new FormData($("#courseForm")[0]);
            $.ajax({
                type : "POST",
                url : "/course/save",
                data : itemData,
                async: false,
                processData : false,
                cache : false,
                contentType : 'multipart/form-data',
                success : function(result) {
                    if(result.message !=null){
                    alert(result.message);
                    }
                },
                error : function(e){
                    alert("Error! Please enter proper data");
                }
            });
            return false;
        }

Класс контроллера

@PostMapping(value="/course/save")
public ResponseDTO addCourse(MultipartHttpServletRequest request, CourseDTO courseDTO) 
{
  System.out.println("Course controller save menthod started");
  return null;
}

Почему я получаю это исключение?И как я могу решить проблему?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Проблема решена с помощью следующего кода ajax

 var itemData=new FormData($("#courseForm")[0]);
        $.ajax({
            type : "POST",
            url : "/course/save",
            data : itemData,
            dataType : "json"
            processData : false,
            cache : false,
            contenttype : false;
            success : function(result) {
                if(result.message !=null){
                alert(result.message);
                }
            },
            error : function(e){
                alert("Error! Please enter proper data");
            }
        });
        return false;

И нам нужно получить данные в контроллере, используя аннотацию @RequestParam, а файл - аннотацию @RequestPart

0 голосов
/ 29 января 2019

Похоже, вы упускаете возможность не задавать enctype и должны явно установить contentType: false,:

function saveCourse() {
  var form = $('#course-form')[0];
  var courseData = new FormData(form);
  $.ajax({
    type : "POST",
    url : "/course/save",
    contentType: false,
    data: courseData,
    processData: false,
    success: function(result) {
      if (result.message != null) {
        alert(result.message);
      }
    },
    error: function(e) {
      alert("Error! Please enter proper data");
    }
  });
  return false;
}

Опустив его, браузер позаботится о создании правильного типа контента с границей из нескольких частей, что-то вроде:

content-type: multipart/form-data; boundary=----WebKitFormBoundaryQ0pBuvRC1EzDAQWT````
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...