Expected MultipartHttpServletRequest: is a MultipartResolver configured?

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;
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章