簡體   English   中英

在Spring MVC中使用jquery上傳文件時,為什么會出現Bad Request類錯誤?

[英]Why am I getting Bad Request kind error when uploading file using jquery with spring mvc?

當我在Spring MVC中使用Jquery時,在瀏覽器端“ Bad Request”處出現錯誤,並且控件未傳遞給控制器​​。當我使用簡單形式並將請求發送到同一控制器時,它就開始了。 以下是我的代碼,請告訴我我要去哪里錯了?

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

還有我在彈簧映射中的Controller類,如下所示

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

謝謝。

實際上,您發送的是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搭配使用不是很好,我們使用的是帶有RestTemplate的Gson。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM