第六讲 Spring MVC实现文件上传

本文介绍如何使用SpringMVC框架配合commons-fileupload组件实现单文件和多文件上传功能,包括配置文件、JSP页面和Controller代码的具体实现。
一、通过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();
           }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值