user4768611
user4768611

Reputation:

The current request is not a multipart request

On uploading my file by ajax I am facing Exeption

org.springframework.web.multipart.MultipartException: The current request is not a multipart request

I google this and find many solution,applied all of them no one resolved my problem-

Below is my html-file

<form id="upload-file-form">
   <label for="upload-file-input">Upload your file:</label>
   <input id="upload-file-input" type="file" name="uploadfile" accept="*" enctype="multipart/form-data" />
</form>

Script for ajax-

$.ajax({
         url: "/util/uploadFile",
         type: "POST",
         data: {'uploadfile':new FormData($("#upload-file-form")[0])},
         enctype: 'multipart/form-data',
         processData: false,
         contentType: false,
         cache: false,
         success: function () {},
         error: function () {}
         });

And this is my Spring boot Controller("/util")-

@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
    @ResponseBody
    public String uploadFile(@RequestParam("uploadfile") MultipartFile uploadfile) {
        System.out.println("----------------");
        System.out.println("----------------" + uploadfile);
        return "success";
    }


    @Bean
    public MultipartConfigElement multipartConfigElement() {
        return new MultipartConfigElement("");
    }

    @Bean
    public MultipartResolver multipartResolver() {
        org.springframework.web.multipart.commons.CommonsMultipartResolver multipartResolver = new org.springframework.web.multipart.commons.CommonsMultipartResolver();
        multipartResolver.setMaxUploadSize(4000000);
        return multipartResolver;
    }

Upvotes: 1

Views: 21667

Answers (1)

Darshan Dalwadi
Darshan Dalwadi

Reputation: 1192

You are sending an Ajax request and you are using name of input field directly in your controller which cause the problem. Because when ajax request come to the controller it doesn't found any parameter with name "uploadfile" that's why it giving you error.

Here I've just put key for the file and it accept request. The code written below is work for me.

Ajax code,

var formData = new FormData();
var file = $('#fileInputId')[0].files[0];

formData.append("myFileKey", file);

$.ajax({
        url : 'myUrl',
        type : 'POST',
        data : formData,
        enctype : 'multipart/form-data',
        contentType : false,
        cache : false,
        processData : false,
        success : function(response) {},
        error: function(){}    
     )};

Java Controller Code:,

    @PostMapping(value = { "/myUrl" }, consumes = { "multipart/form-data" })
    public ModelAndView readFileData(@RequestParam("myFileKey") MultipartFile uploadedFile) throws IOException 
   {
                 Your Stuff...... 
   }

Upvotes: 1

Related Questions