Question

I am using this code to post an image file to my controller but I always get a null value for the file body part.

@RequestMapping(value = "/updateprofile", method = RequestMethod.POST)
public @ResponseBody
ResponseMsg updateProfile(
        @RequestHeader(value = "userid", required = false) String userid,
        @RequestHeader(value = "name", required = false) String name,
        @RequestHeader(value = "phone", required = false) int phone,
        @RequestParam(value = "file", required = false) MultipartFile file) {

    ResponseMsg responseMsg = CommonUtils.checkParam(userid, name, phone,
            file);
    if (responseMsg.getStatus().equalsIgnoreCase("True"))
        responseMsg = userService.login(name, userid);
    return responseMsg;
}

Can anyone help with this?

Was it helpful?

Solution

When you use multipart then your form fields are included in request Stream. So you have to check whether they are form fields or not.

This is what I use in a servlet, you can make appropriate changes in it to work in Spring-MVC.

boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (isMultipart)
        {
            try 
            {
                List items = upload.parseRequest(request);
                Iterator iterator = items.iterator();
                while (iterator.hasNext()) 
                {
                    FileItem item = (FileItem) iterator.next();

                    if (item.isFormField()) //your code for getting form fields
                    {
                        String name = item.getFieldName();
                        String value = item.getString();
                        System.out.println(name+value);
                    }

                    if (!item.isFormField()) 
                    {
                       //your code for getting multipart 
                    }
                }
            }

OTHER TIPS

firstly please post more code then we can find more, secondly I think the problem is your form. If you use Spring mvc upload file, your form should be like this: <form action="your url" method="post" enctype="multipart/form-data"> pay attention to enctype, it lets the Spring DispatchServlet know that you want to upload a file. and also you should check did you config MutilPartFileResovler in the config file.

For those who are still struggling with this problem, here's what worked for me. Previously my input field was defined as,

<input type="file" />

I was getting null file with the above line but when I added the name="file" everything worked fine!

<input type="file" name="file" />

Hope this helps!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top