DevGo
DevGo

Reputation: 1078

File upload not works in spring mvc and tomcat6

I am working in spring mvc with tomcat6. I tried to upload a file and able to do with war deployment using tomcat8.

But I am getting the following error, while using the same war with tomcat6 deployment.

    org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'userId' is not present

My complete code as follows,

Added jars in pom

    <!-- Apache Commons Upload -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.2.2</version>
    </dependency>

    <!-- Apache Commons Upload -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.0.1</version>
    </dependency>

Added bean for upload in ApplicationContext.xml

    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10000000" />
    </bean>

Controller which return the userId

public class UploadDocController extends AbstractController {
@Resource
private UserService userService;


@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

    Long userId = userService.getLoggedInUser(request).getId();

    ModelAndView modelAndView = new ModelAndView(UploadDocView.uploadmain);
    modelAndView.addObject("userId", userId);
    return modelAndView;
}

}

JSP:

    <form method="POST" enctype="multipart/form-data" action="upload.htm">
        File to upload: 
        <input type="file" name="file"><br /> 

        <input type="hidden" name="userId" value="${userId}"><br /> <br />

        <input type="submit" value="Upload">
    </form>

FileUploadController.java

    @Controller
    public class FileUploadController {

    @Resource
    private CollectionsRepository collectionsRepository;

    @RequestMapping(value="/upload", method=RequestMethod.GET)
        public @ResponseBody String provideUploadInfo() {
            return "You can upload a file by posting to this same URL.";
        }

        @RequestMapping(value="/upload.htm", method=RequestMethod.POST)
        public ModelAndView handleFileUpload(@RequestParam(value ="userId") String userId, 
                @RequestParam(value ="file") MultipartFile file){
            System.out.println("userId--------"+userId);
            if (!file.isEmpty()) {
                try {
                    String filePath = "/home/ubuntu/analyzer/LOS/";
                    byte[] bytes = file.getBytes();
                    File newFile = new File(filePath+""+file.getOriginalFilename());
                    BufferedOutputStream stream =
                            new BufferedOutputStream(new FileOutputStream(newFile));
                    stream.write(bytes);
                    stream.close();

                    List<BankStatementError> errorList = new ArrayList<BankStatementError>();

                    Excelsheetreader esr = new Excelsheetreader();
                    List<String> listaddSN = esr.GetCalculation(Long.parseLong(userId), filePath+""+file.getOriginalFilename());

                    newFile.delete();

                    for (int i = 0; i < listaddSN.size(); i++) {
                        String bank = listaddSN.get(i);
                        BankStatementError error = collectionsRepository.getErrorByBank(bank);
                        errorList.add(error);
                    }

                    ModelAndView modelAndView = new ModelAndView(UploadDocView.uploadsuccess);
                    modelAndView.addObject("errorList", errorList);
                    return modelAndView;
                } catch (Exception e) {
                    ModelAndView modelAndView = new ModelAndView(UploadDocView.uploadexecption);
                    return modelAndView;
                }
            } else {
                ModelAndView modelAndView = new ModelAndView(UploadDocView.uploadempty);
                return modelAndView;
            }
        }
    }

The error I am getting is

    org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'userId' is not present

Is there any other way to do this using tomcat6? hope someone will suggest in this.

Thanks in advance..

screenshot..

enter image description here

Upvotes: 1

Views: 202

Answers (1)

Piyush Mittal
Piyush Mittal

Reputation: 1890

the time when you are calling your jsp file the parameter is not been attached with you response.

see-

<input type="hidden" name="userId" value="${userId}"><br /> <br />

here you are trying to access the value of userId but there might not be availability of the parameter you are looking for.

so possibly adding the parameter with the response will remove the error.

Upvotes: 1

Related Questions