Spring mvc ajax文件上传导致415(不支持的媒体类型)

Posted

技术标签:

【中文标题】Spring mvc ajax文件上传导致415(不支持的媒体类型)【英文标题】:Spring mvc ajax file upload leading to 415 (Unsupported Media Type) 【发布时间】:2015-07-21 15:52:28 【问题描述】:

我正在尝试使用 jquery ajax 方法进行文件上传。但它会导致客户端出现 415(不支持的媒体类型)错误。但使用非 ajax 请求我的代码工作正常。

我的控制器代码。

@RequestMapping(value = "/imageUpload", headers = "content-type=multipart/*", method = RequestMethod.POST, consumes = "application/json")
public @ResponseBody
String uploadImage( @RequestParam("fileData") MultipartFile multipartFile, HttpServletRequest request )

       // statements

我的浏览页面

<form id="uploadForm" action="imageUpload" method="post" enctype="multipart/form-data">
    <div>
        <input type="file" id="fileData" name="fileData" />
        <input type="submit" id="submitContent"  value="upload" />
    </div>
 </form>

和 ajax 调用。

$("#uploadForm").submit(function (e) 
     e.preventDefault();
                var $form = $("#uploadForm");                 
                $.ajax(
                  type: $form.attr('method'),
                  url: $form.attr('action'),                 
                  data: $form.serialize(),
                  dataType : 'json',
                  enctype: 'multipart/form-data',
                  processData: false,                     
                  success: function(msg)
                        $( "#editor" ).append(msg);
                    ,
                    error: function(XMLHttpRequest, textStatus, errorThrown)  
                        alert("Status: " + XMLHttpRequest);   alert("Status: " + textStatus); alert("Error: " + errorThrown); 
                    
                  );
 );

我尝试了几件事,例如设置 contentType:false 。 因此,如果需要,请建议我进行任何更改。

【问题讨论】:

【参考方案1】:

看看这个Sending files using a FormData object

文件元素中的数据未序列化,请使用new FormData() 初始化数据,然后添加您的表单元素,包括data 元素。 此代码将起作用

    $("#uploadForm").submit(function(e) 
    e.preventDefault();
    var $form = $("#uploadForm");
    var fd = new FormData($(this)[0]);
    console.info(fd);
    $.ajax(
        type : 'POST',
        url : $form.attr('action'),
        data : fd,
        cache : false,
        processData : false,
        contentType : false,
        success : function(response) 
            console.info(response);
        ,
        error : function(XMLHttpRequest, textStatus, errorThrown) 
            console.info("Status: " + XMLHttpRequest);
            alert("Status: " + textStatus);
            alert("Error: " + errorThrown);
        
    );
);

要添加其他表单变量,请使用fd.append(...)

【讨论】:

以上是关于Spring mvc ajax文件上传导致415(不支持的媒体类型)的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC 415 不支持的媒体类型

Spring MVC中传递json数据时显示415错误解决方法

求教Spring mvc 处理 ajax问题,在线等

POST JSON 失败,出现 415 Unsupported media type, Spring 3 mvc

Ajax POST 导致 405(不允许的方法) - Spring MVC

spring mvc ajax file upload