簡體   English   中英

當前請求的類型不是[org.springframework.web.multipart.MultipartHttpServletRequest]

[英]Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]

我正在嘗試使用以下文件上傳文件。 但是我正在獲取java.lang.IllegalStateException:當前請求的類型不是[org.springframework.web.multipart.MultipartHttpServletRequest]:org.apache.catalina.connector.RequestFacade@1b04024。

當我調用form.submit(); 而不是form.submit(function(){使用ajax調用它按預期方式工作。但是我需要從Spring控制器返回一個字符串值並獲取JS函數。下面的代碼可以工作。

Angularjs函數:

    function fnSubmitUploadForm(formData){
        var iframe = $('<iframe name="postiframe" id="postiframe" style="display: none"></iframe>');
        $("body").append(iframe);
        var form = $('#upload');
        form.attr("action", CONTEXT_PATH+"/uploadFile");
        form.attr("method", "post");
        form.attr("encoding", "multipart/form-data");
        form.attr("enctype", "multipart/form-data");
        form.attr("target", "postiframe");
        form.attr("uploadfile", $('#uploadfile').val());
        var input =  $('<input type="hidden" name="filename"/>').val(formData);
        input.appendTo(form);

        form.submit(function(){
            $.ajax({
              url: form.attr('action'),
              type: 'POST',
              data : form.serialize(),
              success: function(){
                alert('form submitted.');
              }
            });
            return false;
        });
    }

彈簧控制器方法:

    @RequestMapping(value="/uploadFile", method=RequestMethod.POST) 
    public @ResponseBody String uploadFile(MultipartHttpServletRequest request, HttpServletResponse response){  
        try{
            MultipartFile file =(MultipartFile) request.getFile("uploadfile");
            String[] formData=request.getParameterValues("filename");

        }   
    }   

原因是您在js提交中使用表單序列化,它無法序列化文件類型之類的表單屬性! 看一下此鏈接: FormData與.serialize(),有什么區別?

我已經通過下面的代碼解決了這個問題。

form.submit(function(){
    var formData1 = new FormData($(this)[0]);
    $.ajax({
        url: form.attr('action'),
        type: 'POST',
        data: formData1,
        async: false,
        cache: false,
        contentType: false,
        processData: false,
        success: function(){
            alert('form submitted.');
        }
    });
    return false;
});

暫無
暫無

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

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