第六讲 Spring MVC实现文件上传

来源:互联网 发布:生化危机6 for mac 编辑:程序博客网 时间:2024/05/21 04:21
一、通过commons-fileupload来实现。导入jar包

           <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.1</version>
           </dependency>

二、配置Spring MVC的配置文件

     <!-- 文件上传配置 -->
     <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置编码格式 -->
        <property name="defaultEncoding" value="utf-8"></property>
        <!-- 设置文件大小 -->
        <property name="maxUploadSize" value="10485760000"></property>
        <!-- 设置缓冲区大小 -->
        <property name="maxInMemorySize" value="40960"></property>
     </bean>

三、JSP页面

     <form action="upload.do"method="post" enctype="multipart/form-data">
           file:<input name="file" type="file" />
           <input type="submit" value="上传" />
     </form>

四、Controller代码

     @RequestMapping(value = "/upload")
     public String fileupload(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request)
                throws IOException {
           //获取文件名
           String fileName = file.getOriginalFilename();
           //获取上传文件的路径
           //String path = request.getRealPath("/fileupload");
           String path = request.getServletContext().getRealPath("/fileupload");

           InputStream is = file.getInputStream();
           OutputStream os = new FileOutputStream(new File(path, fileName));

           int len = 0;
           byte[] buffer = new byte[400];
           
           while((len = is.read(buffer)) != -1) {
                //每次都是从buffer内存处的0偏移开始写,每次写len字节
                os.write(buffer, 0, len);
           }

           os.close();
           is.close();

           System.out.println(path);//用来查看文件所在路径
           System.out.println(file.getOriginalFilename());
           return "/index.jsp";
     }


五、批量上传
 
     JSP页面:

     <form action="upload.do" method="post" enctype="multipart/form-data">
           file1:<input name="files" type="file" /><br>
           file2:<input name="files" type="file" /><br>
           <input type="submit" value="上传" />
     </form>

     Controller代码:

@RequestMapping(value = "/upload")
     public String fileupload(@RequestParam("files")CommonsMultipartFile[] files, HttpServletRequest request)
                throws IOException {

           for(CommonsMultipartFile file : files) {
                
                //判断到底是由file==null还是由file.getOriginalFilename()==""引起的单个文件上传出错
                System.out.println(file+":"+file.getOriginalFilename());

                //解决file.getOriginalFilename()==""会引起单个文件上传出错
                if(file.getOriginalFilename() == "") {
                     continue;
                }

                //获取文件名
                String fileName = file.getOriginalFilename();
                //获取上传文件的路径
                //String path = request.getRealPath("/fileupload");
                String path = request.getServletContext().getRealPath("/fileupload");

                InputStream is = file.getInputStream();
                OutputStream os = new FileOutputStream(new File(path, fileName));

                int len = 0;
                byte[] buffer = new byte[400];

                while((len = is.read(buffer)) != -1) {
                     //每次都是从buffer内存处的0偏移开始写,每次写len字节
                     os.write(buffer, 0, len);
                }

                os.close();
                is.close();
           }