zl程序教程

您现在的位置是:首页 >  后端

当前栏目

SpringMVC上传文件详解编程语言

2023-06-13 09:20:31 时间

使用springMVC提供的CommonsMultipartFile类进行读取文件

需要用到上传文件的两个jar包 commons-logging.jar、commons-io-xxx.jar

1、在spring配置文件中配置文件上传解析器

[html] 
view plain
 copy


 
在CODE上查看代码片
派生到我的代码片

!  method必须为post 及enctype属性   form action= fileUpload.do  method= post  enctype= multipart/form-data     input type= file  name= file     input type= submit  value= 上传   /form  

 
在CODE上查看代码片
派生到我的代码片

@Controller  public class FileController{     @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 ;   }  } 

基于上一篇文件上传发现效率很慢,我们应该对它进行优化  使用springMVC对文件上传的解析器

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

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

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

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

此处只改动FileController类 其他配置参考上一篇 blog.ytso.com/article/details/27976873


 
在CODE上查看代码片
派生到我的代码片

@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 ;   }  } 



同样上传一个3.54M的PDF文件 只使用了16毫秒(已自己计算机实际为准)

可见差别之悬殊。

转自blog.ytso.com/article/details/27976873

11212.html

cjavaxml