2016-08-20 3 views
2

Spring MVCでJqueryを使用しているときに、ブラウザ側の「Bad Request」でエラーが発生し、コントローラに接続できません。単純なフォームを使用していて、同じコントローラにリクエストを送信しています。 以下は私のコードですが、どこが間違っているのか教えてください。spring mvcを使用してjqueryを使用してファイルをアップロードするときに、Bad Request kind errorが表示されるのはなぜですか?

@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(); 
     } 
    } 

おかげ下記春マッピングで

<%@ 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> 

そして、私のコントローラクラス。

答えて

0

実際には、HTML、JSONを送信していないあなたが

@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 

を@ResponseBody使用する必要があります。また忘れてはいけません! plus jackson libを使用してオブジェクトをjquery doneファンクションに返す Gson libは@ResponseBodyと一緒に使うのは良くありませんが、代わりにRestTemplateでGsonを使用しています。

関連する問題