spring实现上传文件

xiaoxiao2021-02-28  64

直接上代码吧,大伙一看便知

这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/commonsmultipartresolver.java.html

前台:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <%@ page language= "java"  contentType= "text/html; charset=utf-8"      pageEncoding= "utf-8" %> <!DOCTYPE html PUBLIC  "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd" > <html> <head> <meta http-equiv= "Content-Type"  content= "text/html; charset=utf-8" > <title>Insert title here</title> </head> <body> <form name= "serForm"  action= "/SpringMVC006/fileUpload"  method= "post"   enctype= "multipart/form-data" > <h1>采用流的方式上传文件</h1> <input type= "file"  name= "file" > <input type= "submit"  value= "upload" /> </form>   <form name= "Form2"  action= "/SpringMVC006/fileUpload2"  method= "post"   enctype= "multipart/form-data" > <h1>采用multipart提供的file.transfer方法上传文件</h1> <input type= "file"  name= "file" > <input type= "submit"  value= "upload" /> </form>   <form name= "Form2"  action= "/SpringMVC006/springUpload"  method= "post"   enctype= "multipart/form-data" > <h1>使用spring mvc提供的类的方法上传文件</h1> <input type= "file"  name= "file" > <input type= "submit"  value= "upload" /> </form> </body> </html>

配置:

1 2 3 4 5 6 <!-- 多部分文件上传 --> <bean id= "multipartResolver"  class = "org.springframework.web.multipart.commons.CommonsMultipartResolver" >       <property name= "maxUploadSize"  value= "104857600"  />       <property name= "maxInMemorySize"  value= "4096"  />       <property name= "defaultEncoding"  value= "UTF-8" ></property> </bean>

 

后台:

方式一:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 /*       * 通过流的方式上传文件       * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象       */      @RequestMapping ( "fileUpload" )      public  String  fileUpload( @RequestParam ( "file" ) CommonsMultipartFile file)  throws  IOException {                              //用来检测程序运行时间          long   startTime=System.currentTimeMillis();          System.out.println( "fileName:" +file.getOriginalFilename());                    try  {              //获取输出流              OutputStream os= new  FileOutputStream( "E:/" + new  Date().getTime()+file.getOriginalFilename());              //获取输入流 CommonsMultipartFile 中可以直接得到文件的流              InputStream is=file.getInputStream();              int  temp;              //一个一个字节的读取并写入              while ((temp=is.read())!=(- 1 ))              {                  os.write(temp);              }             os.flush();             os.close();             is.close();                    }  catch  (FileNotFoundException e) {              // TODO Auto-generated catch block              e.printStackTrace();          }          long   endTime=System.currentTimeMillis();          System.out.println( "方法一的运行时间:" +String.valueOf(endTime-startTime)+ "ms" );          return  "/success" ;       }

 方式二:

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /*       * 采用file.Transto 来保存上传的文件       */      @RequestMapping ( "fileUpload2" )      public  String  fileUpload2( @RequestParam ( "file" ) CommonsMultipartFile file)  throws  IOException {           long   startTime=System.currentTimeMillis();          System.out.println( "fileName:" +file.getOriginalFilename());          String path= "E:/" + new  Date().getTime()+file.getOriginalFilename();                    File newFile= new  File(path);          //通过CommonsMultipartFile的方法直接写文件(注意这个时候)          file.transferTo(newFile);          long   endTime=System.currentTimeMillis();          System.out.println( "方法二的运行时间:" +String.valueOf(endTime-startTime)+ "ms" );          return  "/success" ;       }

 

 方式三:

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 /*       *采用spring提供的上传文件的方法       */      @RequestMapping ( "springUpload" )      public  String  springUpload(HttpServletRequest request)  throws  IllegalStateException, IOException      {           long   startTime=System.currentTimeMillis();           //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)          CommonsMultipartResolver multipartResolver= new  CommonsMultipartResolver(                  request.getSession().getServletContext());          //检查form中是否有enctype="multipart/form-data"          if (multipartResolver.isMultipart(request))          {              //将request变成多部分request              MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;             //获取multiRequest 中所有的文件名              Iterator iter=multiRequest.getFileNames();                            while (iter.hasNext())              {                  //一次遍历所有文件                  MultipartFile file=multiRequest.getFile(iter.next().toString());                  if (file!= null )                  {                      String path= "E:/springUpload" +file.getOriginalFilename();                      //上传                      file.transferTo( new  File(path));                  }                                }                      }          long   endTime=System.currentTimeMillis();          System.out.println( "方法三的运行时间:" +String.valueOf(endTime-startTime)+ "ms" );      return  "/success" ;       }

我们看看测试上传的时间:

第一次我用一个4M的文件:

fileName:test.rar 方法一的运行时间:14712ms fileName:test.rar 方法二的运行时间:5ms 方法三的运行时间:4ms

 

第二次:我用一个50M的文件 方式一进度很慢,估计得要个5分钟

方法二的运行时间:67ms 方法三的运行时间:80ms

转载请注明原文地址: https://www.6miu.com/read-66696.html

最新回复(0)