spring mvc文件上傳和下載

首先要導入2個包(上傳文件包和io的包)java

 

配置文件spring-servlet.xml文件中web

<!-- 配置文件上傳MultipartResolver -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="5000000"></property>
    </bean>

若是id="multipartResolver"沒傳,就會報如下的錯(當心當心)spring

Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?

添加文件的顯示頁面add.sjp數組

a、enctype="multipart/form-data"這句就是告訴,要添加文件,很重要服務器

b、 attach:<input type="file" name="attach"><br/>app

    <form:form modelAttribute="user" method="post" enctype="multipart/form-data">
        ID:<form:input path="id"/><br/>
        userName:<form:input path="userName"/><form:errors path="userName"/><br/>
        password:<form:input path="password"/><form:errors path="password"/><br/>
        email:<form:input path="email"/><form:errors path="email"/><br/>
        attach:<input type="file" name="attach"><br/>
        <input type="submit" value="提交"/>
      </form:form>

修改添加的方法函數

a、指定路徑post

b、上傳文件,就要文件保存的目標位置spa

@RequestMapping(value="/add",method=RequestMethod.POST)
        public String add(@Validated User user,BindingResult bindingResult,MultipartFile attach,HttpServletRequest request){
            //上傳文件就是要上傳的路徑因此就須要request對象
            if(bindingResult.hasErrors()){
                return "user/add";
            }
            //指定上傳位置
            String uploadFilePath = request.getSession().getServletContext().getRealPath("statics/upload");
            System.out.println(uploadFilePath);
            
            System.out.println(attach.getOriginalFilename());//原始名
            System.out.println(attach.getContentType());//類型
            System.out.println(attach.getName());//頁面表單控件name的值
            
            if(!attach.isEmpty()){
                try {
                    //"/" 更換成自動識別分隔符File.separator
                    File saveFile = new File(uploadFilePath+File.separator+attach.getOriginalFilename());
                    //第一個是拿到輸入流,第二個參數是保存到哪裏
                    FileUtils.copyInputStreamToFile(attach.getInputStream(), saveFile);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            //把user對象放進去key(id)
            userList.put(user.getId(), user);
            
//            return "user/userlist";//返回到邏輯視圖名
            //(添加後,不能把添加過的數據展現出來)服務器端行爲
            return "redirect:/user/list";//客戶端從新發送請求(把添加進去的展現出來)
        }

多文件的上傳code

由於是多文件因此必定要加@RequestParam不加的話報以下異常

//Could not instantiate bean class [[Lorg.springframework.web.multipart.MultipartFile;]: No default constructor found;nested exception is java.lang
//不能實例化bean類[[Lorg.springframework.web.multipart。MultipartFile;]:沒有默認構造函數發現,嵌套異常. lang。
//頁面500

 

//文件上傳(多文件)
        @RequestMapping(value="/add",method=RequestMethod.POST)
        public String add(@Validated User user,BindingResult bindingResult,@RequestParam("attachs") MultipartFile[] attachs,HttpServletRequest request){
            //上傳文件就是要上傳的路徑因此就須要request對象
            if(bindingResult.hasErrors()){
                return "user/add";
            }
            //指定上傳位置
            String uploadFilePath = request.getSession().getServletContext().getRealPath("statics/upload");
            try {
                for(MultipartFile attach:attachs){
                
                    if(!attach.isEmpty()){
                    
                            //"/" 更換成自動識別File.separator
                            File saveFile = new File(uploadFilePath+File.separator+attach.getOriginalFilename());
                            //第一個是拿到輸入流,第二個參數是保存到哪裏
                            FileUtils.copyInputStreamToFile(attach.getInputStream(), saveFile);
                        } 
                }
            }catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //把user對象放進去key(id)
            userList.put(user.getId(), user);
            
//            return "user/userlist";//返回到邏輯視圖名
            //(添加後,不能把添加過的數據展現出來)服務器端行爲
            return "redirect:/user/list";//客戶端從新發送請求(把添加進去的展現出來)
        }

 

由於多文件是一個數組,attach:<input type="file" name="attachs"><br/>

這邊的name要是attachs,不然就找不到

<form:form modelAttribute="user" method="post" enctype="multipart/form-data">
        ID:<form:input path="id"/><br/>
        userName:<form:input path="userName"/><form:errors path="userName"/><br/>
        password:<form:input path="password"/><form:errors path="password"/><br/>
        email:<form:input path="email"/><form:errors path="email"/><br/>
        attach:<input type="file" name="attachs"><br/>
        attach1:<input type="file" name="attachs"><br/>
        attach2:<input type="file" name="attachs"><br/>
        <input type="submit" value="提交"/>
      </form:form>
相關文章
相關標籤/搜索