zoukankan      html  css  js  c++  java
  • spring mvc文件上传和下载

    首先要导入2个包(上传文件包和io的包)

     

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

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

    如果id="multipartResolver"没传,就会报以下的错(小心小心)

    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/>

        <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、指定路径

    b、上传文件,就要文件保存的目标位置

    @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";//客户端重新发送请求(把添加进去的展示出来)
            }

    多文件的上传

    因为是多文件所以一定要加@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>
  • 相关阅读:
    SQL---一次插入多条数据【使用Union】
    SQL--联合查询【Union】
    也说梦想----2015年终总结
    csharp: Procedure with DAO(Data Access Object) and DAL(Data Access Layer)
    csharp:Nhibernate Procedure with CreateSQLQuery and GetNamedQuery
    csharp: Domain-Driven Design(领域驱动设计)
    csharp:VerifyCode in winform or webform
    csharp: DBNull and DateTime
    csharp: DataRelation objects to represent a parent/child/Level relationship
    csharp: .NET Object Relationional Mapper (ORM)- SubSonic
  • 原文地址:https://www.cnblogs.com/xuerong/p/4955997.html
Copyright © 2011-2022 走看看