下面是文件接收的方法,其中List<FileItem> items為空,獲取不到上傳文件。
@RequestMapping(value = "/imagedetect", method = { RequestMethod.POST}) @ResponseBody public Object imagedetect(ModelMap model, HttpServletResponse response) throws IOException { logger.info("檢測任務開始====" + DateUtil.getCurrentTime()); HttpServletRequest request=CommonUtil.getRequest(); String access_token = request.getParameter("access_token"); String url = request.getParameter("image"); String tag = request.getParameter("tag"); Object obj = new Object(); //判斷該請求是否有上傳文件 if(ServletFileUpload.isMultipartContent(request)) { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); try { List<FileItem> items = upload.parseRequest(request); for(FileItem item: items) { } } catch (FileUploadException e) { e.printStackTrace(); } }else{ } }
經過查找資料,分析后,發現在springmvc的配置文件中有這樣一段代碼:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8" /> <property name="maxUploadSize" value="104857600"/> <property name="maxInMemorySize" value="4096"/> </bean>
這兩種分別是兩種上傳文件的設置方式,但是不能同時使用。切記。
把這個配置刪除測試發現問題解決。
如果你想使用springmvc的文件上傳方式,只需要后台接收的方法這么寫:
@RequestMapping(value = "imagedetectufile", method = { RequestMethod.POST }) @ResponseBody public Object detectPictureTask( @RequestParam(value = "image", required = false) MultipartFile file[], ModelMap model, HttpServletResponse response) throws IOException { //業務邏輯。。。 //............ }
親測好使。