0

Я пытаюсь загрузить файл csv с загрузкой Spring 1.2.0 REST и jQuery ajax. Когда я отправляю запрос на отправку, я продолжаю получать ошибку 415: Unsupported Media type. Вот моя форма:Загрузка Spring и загрузка файла jQuery: Неподдерживаемый тип носителя

<form id="upload_form"> 
    <div id="message">   

    </div> 

    <br/> 
    <div class="row" id="upload-file-div" style="display: none"> 
     <div class='col-sm-3'> 
      <label>Select File</label> 
      <input type="file" name="file"> 
     </div> 

     <div class='col-sm-3'> 
      <input type="button" id="file-upload" class="btn btn-primary" value="Upload" onclick="uploadFile()"/>   
     </div> 
    </div> 
</form> 

Вот мой метод для загрузки файла:

function uploadFile(){ 
    var response = api.uploadCSV($("#upload_form")); 
    if(response.status === 'OK'){ 
     $("#message").css('color', 'green'); 
    }else{ 
     $("#message").css('color', 'red'); 
    } 
    $("#message").html(response.message); 
} 

Вот фактический JQuery POST:

upload: function (url, form, ignoreSuccess) { 
    var response = null; 
    if (!this.validate(form)) { 
     var array = form.serializeArray(); 
     alert(array); 
     var formData = new FormData(form); 
     console.warn(formData); 
     $.ajax({ 
      type: "POST", 
      url: API_PROXY + url, 
      data: formData, 
      cache: false, 
      contentType: false, 
      processData: false, 
      async: false, 
      beforeSend: function (request) { 
       if (api.getSession() !== null) { 
        request.setRequestHeader("Authorization", "Bearer " + api.getSession().bearer); 
       } 
      }, 
      success: function() {} 

     }).done(function (msg) { 
      response = msg; 
     }); 

    } 
    return response; 
} 

Ниже мой контроллер:

@RequestMapping(consumes = "multipart/form-data", method = RequestMethod.POST, 
     value = "/upload/twitter", produces = MediaType.APPLICATION_JSON_VALUE) 
public Response<String> uploadCsv(CsvUploadModel form) { 

// Код

}

У меня есть и MultipartConfigElement и MultipartResolver аннотированный в моем классе весной загрузки. Я использую spring boot 1.2.0. Когда я отправляю почтовый запрос с PostMan (chrome extension), он работает так, как ожидалось. Однако, когда я пытаюсь использовать код jquery выше, он продолжает бросать неподдерживаемую ошибку типа носителя.

После вещи я пытался:

  • Playing вокруг заголовка типа содержимого, в конце концов я устанавливал CONTENTTYPE ложь.
  • Использование form.serializeArray(), итерация по нему и добавление отдельных элементов в formData.
  • Отправка объекта формы вместо данных формы.

Может ли кто-нибудь помочь мне в этом? Заранее спасибо.

ответ

0

Вы можете добавить свой файл в свой formData; следующие изменения должны быть сделаны:

Это:

<input type="file" name="file"> 

Должно быть:

<input type="file" name="file" id="file"> 

И в вашем коде Ajax это:

var formData = new FormData(form); 
    console.warn(formData); 
    $.ajax({ 
     type: "POST", 
     url: API_PROXY + url, 
     data: formData, 

Должно быть:

var formData = new FormData(); 
formData.add("file",$('#file')[0].files) 
    $.ajax({ 
     type: "POST", 
     url: API_PROXY + url, 
     data: formData, 

или:

var formData = new FormData(form[0]); 
$.ajax({ 
     type: "POST", 
     url: API_PROXY + url, 
     data: formData,  
Смежные вопросы