【问题标题】:Why am I getting Bad Request kind error when uploading file using jquery with spring mvc?为什么我在使用带有 spring mvc 的 jquery 上传文件时收到 Bad Request kind 错误?
【发布时间】:2016-12-27 11:18:58
【问题描述】:

当我将 Jquery 与 Spring MVC 一起使用时,我在浏览器端出现“错误请求”错误,并且控制不去控制器。虽然我使用简单的表单并向同一个控制器发送请求,但它正在运行。 以下是我的代码,请告诉我哪里出错了?

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>

 <script src="files/jquery-1.10.2.js"></script>
    <script src="files/jquery-1.10.2.min.js"></script>
<script type="text/javascript">

var isJpg = function(name) {
    return name.match(/jpg$/i)
};

var isPng = function(name) {
    return name.match(/png$/i)
};

$(document).ready(function() {
    var file = $('[name="file"]');
    var imgContainer = $('#imgContainer');

    $('#btnUpload').on('click', function() {
        var filename = $.trim(file.val());

        if (!(isJpg(filename) || isPng(filename))) {
            alert('Please browse a JPG/PNG file to upload ...');
            return;
        }

        $.ajax({
            url: 'FileData.htm',
            type: "POST",
            data: new FormData(document.getElementById("fileForm")),
            enctype: 'multipart/form-data',
            processData: false,
            contentType: false
          }).done(function(data) {
              imgContainer.html('');
              var img = '<img src="data:' + data.contenttype + ';base64,'
                  + data.base64 + '"/>';

              imgContainer.append(img);
          }).fail(function(jqXHR, textStatus) {
              //alert(jqXHR.responseText);
              alert('File upload failed ...');
          });

    });

    $('#btnClear').on('click', function() {
        imgContainer.html('');
        file.val('');
    });
});

</script>

</head>
<body>
 <!-- <form name="dlgContent" action="FileData.htm" id="dlgcon"  enctype="multipart/form-data" method="POST">
 <input type="file" name="excelfile"/>
 <input type="submit"/>
 </form> -->


 <div>
<form id="fileForm">
    <input type="file" name="file" />
    <button id="btnUpload" type="button">Upload file</button>
    <button id="btnClear" type="button">Clear</button>
</form>
<div id="imgContainer"></div>
</div>


</body>
</html>

下面给出了我在 spring 映射中的控制器类

@RequestMapping(value="/FileData.htm", method = RequestMethod.POST)
    public void FileData(Model model, @RequestParam CommonsMultipartFile[] excelfile, HttpServletRequest request, HttpServletResponse response){
        System.out.println("bhjsbfjhsbfbdesfbsfb");
        response.setContentType("application/json");
        FileData fd = new FileData();
        //Map<String, String> data = fd.submitFileData(excelfile);

        Gson gson = new Gson();
    //  String values = gson.toJson(data);

        try {
            //response.getWriter().write(values);
            //System.out.println(values);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

谢谢。

【问题讨论】:

    标签: java jquery spring-mvc


    【解决方案1】:

    实际上你发送的是 Json 而不是 html 你应该使用@ResponseBody

        @RequestMapping(value="/upload", method = RequestMethod.POST)
    public @ResponseBody
    FileData upload(MultipartHttpServletRequest request,
                                @RequestParam String albumName,
                                 HttpServletResponse response) {
      Iterator<String> itr =  request.getFileNames();
    
        //others code here
    

    也别忘了!!配置多部分数据, 加上使用jackson lib将对象发送回jquery done函数才能工作 Gson lib 不适合与 @ResponseBody 一起使用,我们将 Gson 与 RestTemplate 一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2014-10-14
      • 1970-01-01
      相关资源
      最近更新 更多