【问题标题】:Spring mvc ajax file upload leading to 415 (Unsupported Media Type)Spring mvc ajax文件上传导致415(不支持的媒体类型)
【发布时间】: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 。 因此,如果需要,请建议我进行任何更改。

【问题讨论】:

    标签: java jquery ajax spring spring-mvc


    【解决方案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(...)

    【讨论】:

      猜你喜欢
      • 2013-08-08
      • 2023-03-04
      • 2017-05-20
      • 2014-11-04
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多