Expected MultipartHttpServletRequest: is a MultipartResolver configured?

来源:互联网 发布:googlenet网络结构 编辑:程序博客网 时间:2024/05/18 06:21

Spring mvc 上传多个文件问题:

1、文件上传中from必须指定enctype="multipart/form-data",如:<formid="formImport"class="form-horizontal"enctype="multipart/form-data">

  页面上传的Request payload:

------WebKitFormBoundary5LvjgAmqutDyQEjpContent-Disposition: form-data; name="file"; filename="模板.xls"

  1. Content-Type: application/wps-office.xls
  2. ------WebKitFormBoundary5LvjgAmqutDyQEjpContent-Disposition: form-data; name="modelId"
  3. 2
  4. ------WebKitFormBoundary5LvjgAmqutDyQEjp--

1、用request.gerParameter("modelId")无法获取页面传入的参数,获取为null。

CommonsMultipartResolver  multipartResolver= new CommonsMultipartResolver(request.getServletContext());MultipartHttpServletRequest multipartHttpServletRequest = multipartResolver.resolveMultipart(request);String modelTypeString = multipartHttpServletRequest.getParameter("modelType").trim();
2、获取多个文件:

页面的jsp为:

<div class="fileupload-btn">    <span class="btn default btn-file">        <span class="fileupload-new">浏览</span>        <span class="fileupload-exists">更改</span>        <input name="file1" type="file" isFile="pic" class="default" />    </span>    <span class="btn default btn-eraser fileupload-exists" data-dismiss="fileupload">清除</span></div>

<input name="file2" type="file" isFile="pic" class="default" />
<input name="file3" type="file" isFile="pic" class="default" />
spring mvc获取多个文件:

spring -mvc-servlet.xml配置:

<!-- 支持上传文件 --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    <property name="defaultEncoding" value="UTF-8"/>    <property name="maxUploadSize" value="1073741824"/>    <property name="maxInMemorySize" value="40960"/></bean>

controller获取多个文件:

方式一:

@RequestMapping(value = "models/{id}",method = RequestMethod.PUT, produces = "application/json;charset=UTF-8")    @ResponseBody    public  String models(@PathVariable int id,HttpServletRequest request, HttpSession session){        String json = null;        <span style="color:#3366ff;">CommonsMultipartResolver  multipartResolver= new CommonsMultipartResolver(request.getServletContext());        MultipartHttpServletRequest multipartHttpServletRequest = multipartResolver.resolveMultipart(request);        String modelTypeString = multipartHttpServletRequest.getParameter("modelType").trim();</span>        String weightString = multipartHttpServletRequest.getParameter("weight").trim();        String size = multipartHttpServletRequest.getParameter("size").trim();        String modelColorString = multipartHttpServletRequest.getParameter("modelColor").trim();        String os = multipartHttpServletRequest.getParameter("os").trim();        String describe = multipartHttpServletRequest.getParameter("describe").trim();        String image1 = multipartHttpServletRequest.getParameter("image1").trim();        image1 = image1.substring(image1.lastIndexOf("/")+1,image1.length());        String image2 = multipartHttpServletRequest.getParameter("image2").trim();        image2 = image2.substring(image2.lastIndexOf("/")+1,image2.length());        String image3 = multipartHttpServletRequest.getParameter("image3").trim();        image3 = image3.substring(image3.lastIndexOf("/")+1,image3.length());        if (StringUtils.isEmpty(size)||StringUtils.isEmpty(os)||StringUtils.isEmpty(modelTypeString)                ||StringUtils.isEmpty(modelColorString)||StringUtils.isEmpty(weightString)){            json = Json.getStatusMessage(1030,MessageCode.getMessageStatusCode(1030));        }else {            Map map = new HashMap();            List<String> list = new ArrayList<String>();            map.put("modelType",Integer.parseInt(modelTypeString));            map.put("modelColor",Integer.parseInt(modelColorString));            map.put("weight",Double.parseDouble(weightString));            map.put("size",size);            map.put("os",os);            if(!StringUtils.isEmpty(describe)){                map.put("describe",describe);            }           <span style="background-color: rgb(51, 102, 255);"> Iterator<String> iterator = multipartHttpServletRequest.getFileNames();//获取多个文件名</span>            String ftpStore = FTPClientUtils.getFTPSetting("ftpStore");            String modelImgPath = FTPClientUtils.getFTPSetting("modelPath");            String FtpUploadPath = ftpStore+"/"+modelImgPath+"/";            if (FTPClientUtils.openConnectFTPService()) {               <span style="background-color: rgb(51, 102, 255);"> while (iterator.hasNext()) {//遍历多个文件</span>                   <span style="background-color: rgb(51, 102, 255);"> String requestName = iterator.next();                    MultipartFile multipartFile = multipartHttpServletRequest.getFile(requestName);//获取文件</span>                   <span style="background-color: rgb(51, 102, 255);"> if (!multipartFile.isEmpty()) {//判断文件不为空</span>                        String fileName = multipartFile.getOriginalFilename();//获取文件名                        String[] fileNames = fileName.split("\\.");                        String type = fileNames[fileNames.length - 1];                        String remoteFileName = CommonUtils.UUID() + "." + type;                        try {                            boolean flag = FTPClientUtils.inputStreamUploadFile(<span style="background-color: rgb(51, 102, 255);">multipartFile.getInputStream()</span>, remoteFileName, FtpUploadPath);                            if (!flag) {                                return Json.getStatusMessage(1033, MessageCode.getMessageStatusCode(1033));                            }                        } catch (IOException e) {                            logger.info("修改图片上传失败!");                            e.printStackTrace();                        }                        list.add(FtpUploadPath+remoteFileName);                        if(requestName.equals("file1")){                            map.put("image1", remoteFileName);                        }else if (requestName.equals("file2")){                            map.put("image2", remoteFileName);                        }else if (requestName.equals("file3")){                            map.put("image3", remoteFileName);                        }                    }                }            }else {                return  Json.getStatusMessage(1032,MessageCode.getMessageStatusCode(1032));            }            json = HttpProtocolHandle.commitData("PUT", APIConstant.BASIC+"models/"+id,  JSONObject.fromObject(map).toString(), session);            if(Json.isSuccess(json)){                if(map.get("image1")!=null){                    FTPClientUtils.deleteFile(FtpUploadPath+image1);                }                if(map.get("image2")!=null){                    FTPClientUtils.deleteFile(FtpUploadPath+image2);                }                if(map.get("image3")!=null){                    FTPClientUtils.deleteFile(FtpUploadPath+image3);                }            }else{                for (int i=0;i<list.size();i++) {                    if(!FTPClientUtils.deleteFile(list.get(i))){                        logger.info("型号图片上传,业务服务器数据保存失败,删除"+map.get("image"+i).toString()+"失败!");                    }                }                list.clear();            }            FTPClientUtils.closeConnection();        }        return  json;    }

方式二:

 @RequestMapping(value = "models",method = RequestMethod.POST, produces = "application/json;charset=UTF-8")    @ResponseBody    public String createModels(@RequestParam("file") MultipartFile[] file, HttpServletRequest request, HttpSession session){        String json = null;        String name = request.getParameter("name").trim();        String modelTypeString = request.getParameter("modelType").trim();        String modelColorString = request.getParameter("modelColor").trim();        String weightString  = request.getParameter("weight");        String size = request.getParameter("size").trim();        String os = request.getParameter("os").trim();        String describe = request.getParameter("describe").trim();        if (StringUtils.isEmpty(name)||StringUtils.isEmpty(size)||StringUtils.isEmpty(os)||StringUtils.isEmpty(modelTypeString)                ||StringUtils.isEmpty(modelColorString)||StringUtils.isEmpty(weightString)){            json = Json.getStatusMessage(1030,MessageCode.getMessageStatusCode(1030));        }else {            Map map = new HashMap();            map.put("name",name);            map.put("modelType",Integer.parseInt(modelTypeString));            map.put("modelColor",Integer.parseInt(modelColorString));            map.put("weight",Double.parseDouble(weightString));            map.put("size",size);            map.put("os",os);            if(!StringUtils.isEmpty(describe)){                map.put("describe",describe);            }            if(file != null && file.length > 0){//判断文件不能为空,file数组必须大于0才有文件                if( FTPClientUtils.openConnectFTPService()){                    String ftpStore = FTPClientUtils.getFTPSetting("ftpStore");                    String modelImgPath = FTPClientUtils.getFTPSetting("modelPath");                    String  FtpUploadPath = ftpStore+"/"+modelImgPath+"/";//                    String  visitPath = FTPClientUtils.getFTPSetting("visitPath")+modelImgPath;                    try{                        List<String> list = new ArrayList<String>();
//循环遍历多个文件                        for (int i=0;i<file.length;i++){                            String fileName = file[i].getOriginalFilename();//获取文件名                            String[] fileNames= fileName.split("\\.");                            String type = fileNames[fileNames.length-1];//获取文件名后缀                            String remoteFileName = CommonUtils.UUID()+"."+type;//通过UUID获取唯一ID来做文件名
//file[i].getInputStream()通过IO流的形式保存文件到资源服务器                            boolean flag = FTPClientUtils.inputStreamUploadFile(file[i].getInputStream(),remoteFileName,FtpUploadPath);                            if (!flag){                              return  Json.getStatusMessage(1033,MessageCode.getMessageStatusCode(1033));                            }                            map.put("image"+(i+1),remoteFileName);                            list.add(FtpUploadPath+remoteFileName);                        }                        JSONObject jsonObject = JSONObject.fromObject(map);                        json = HttpProtocolHandle.commitData("POST", APIConstant.BASIC+"models", jsonObject.toString(), session);                        if (!Json.isSuccess(json)){                            for (int i=0;i<list.size();i++) {                                if(!FTPClientUtils.deleteFile(list.get(i))){                                    logger.info("型号图片上传,业务服务器数据保存失败,删除"+map.get("image"+i).toString()+"失败!");                                }                            }                        }                        list.clear();                    }catch (IOException e){                        e.printStackTrace();                    }                    FTPClientUtils.closeConnection();                }else {                    json =  Json.getStatusMessage(1032,MessageCode.getMessageStatusCode(1032));                }            }else {                json = Json.getStatusMessage(1031,MessageCode.getMessageStatusCode(1031));            }        }        return json;    }

0 0
原创粉丝点击