码迷,mamicode.com
首页 > 编程语言 > 详细

java文件上传

时间:2018-03-21 18:30:57      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:mes   res   val   out   stat   读取   ons   close   control   

springmvc的文件上传是可插拔,默认没有启用,在springmvc容器中实例化multipartResolver接口的实现类即可。springmvc为我们提供整合了commons-fileupload的CommonsMultipartResolver解析器,只需实例化该类即可:          

 

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
    <!-- 最大文件大小,单位字节 -->  
    <property name="maxUploadSize" value="100000"/>   
</bean>

前端页面代码:

<!-- method必须为post 及enctype属性为multipart/form-data,否则后端接收不到-->  
<form action="fileUpload.do" method="post" enctype="multipart/form-data">  
    <input type="file" name="file">  
    <input type="submit" value="上传">  
</form>

后端接收方式可以有两种:

  1.通过CommonsMultipartFile参数接收:

 @RequestMapping("/fileUpload.do")  
    public String fileUpload(@RequestParam("file") CommonsMultipartFile file,HttpServletRequest request,
        HttpServletResponse response){  
        long startTime=System.currentTimeMillis();   //获取开始时间  
        if(!file.isEmpty()){  
            try {  
                //定义输出流 将文件保存在D盘    file.getOriginalFilename()为获得文件的名字   
                FileOutputStream os = new FileOutputStream("D:/"+file.getOriginalFilename());  
                InputStream in = file.getInputStream();  
                int b = 0;  
                while((b=in.read())!=-1){ //读取文件   
                    os.write(b);  
                }  
                os.flush(); //关闭流   
                in.close();  
                os.close();  
                  
            } catch (FileNotFoundException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
        long endTime=System.currentTimeMillis(); //获取结束时间  
        System.out.println("上传文件共使用时间:"+(endTime-startTime));  
        return "success";  
    }  
}

2.通过解析request获取文件类型:

@Controller  
public class FileController{  
      
    @RequestMapping("/fileUpload.do")  
    public String fileUpload(HttpServletRequest request,HttpServletResponse response){  
        long startTime=System.currentTimeMillis();   //获取开始时间  
          
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());  
        if(multipartResolver.isMultipart(request)){ //判断request是否有文件上传  
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;  
            Iterator<String> ite = multiRequest.getFileNames();  
            while(ite.hasNext()){  
                MultipartFile file = multiRequest.getFile(ite.next());  
                if(file!=null){  
                    File localFile = new File("D:/"+file.getOriginalFilename());  
                    try {  
                        file.transferTo(localFile); //将上传文件写到服务器上指定的文件  
                    } catch (IllegalStateException e) {  
                        e.printStackTrace();  
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
        }  
        long endTime=System.currentTimeMillis(); //获取结束时间  
        System.out.println("上传文件共使用时间:"+(endTime-startTime));  
          
        return "success";  
    }  
} 

经测试使用第二种执行效率要高于第一种。

使用springMVC对文件上传的解析器

来处理文件上传的时候需要在spring的applicationContext里面加上springMVC提供的MultipartResolver的申明

这样客户端请求的时候 springMVC会检查request里面是否包含多媒体信息 如果包含了就会使用MultipartResolver进行解析,

springMVC会使用一个支持文件  处理的MultipartHttpServletRequest来包裹当前的HttpServletRequest

然后使用MultipartHttpServletRequest就可以对文件进行处理了

 

java文件上传

标签:mes   res   val   out   stat   读取   ons   close   control   

原文地址:https://www.cnblogs.com/gongxh/p/8618502.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!