Spring Boot和jQuery文件上传:不支持的媒体类型

我试图用spring boot 1.2.0 REST控制器和jQuery ajax上传一个csv文件。 当我发送帖子请求时,我一直得到415:不支持的媒体类型错误。 这是我的表格:

<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) {

//码

}

我在我的spring引导类中注释了MultipartConfigElement和MultipartResolver。 我使用的是spring boot 1.2.0。 当我用PostMan发送邮件请求(扩展名为Chrome)时,它按预期工作。 但是,当我尝试上述jQuery代码时,它会一直抛出不支持的媒体类型错误。

以下是我尝试过的事情:

  • 玩弄内容类型的头文件,最后我将contentType设置为false。
  • 使用form.serializeArray(),遍历它并将单个元素附加到formData中。
  • 发送表单对象而不是表单数据。
  • 任何人都可以帮助我吗? 提前致谢。


    你可以在你的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,    
    
    链接地址: http://www.djcxy.com/p/8575.html

    上一篇: Spring Boot and jQuery file upload : Unsupported media type

    下一篇: Multipart File upload Spring Boot