java常见3种文件上传方式

您所在的位置:网站首页 java文件上传到本地服务器上怎么弄 java常见3种文件上传方式

java常见3种文件上传方式

2024-07-01 05:01| 来源: 网络整理| 查看: 265

还是老规矩,大神请绕一下,里屋说话。

首先呢,使用springMVC原生上传文件方法,需要一些简单的配置,不多说,上图。

1.采用spring提供的上传文件的方法

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 @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( "Spring方法的运行时间:" +String.valueOf(endTime-startTime)+ "ms" );          return  "/success" ;       }

  在这里故意加一个计时,待会就用它简单的比较上传时间问题(本人暂时还没能力处理资源占用问题,所以这里也不做比较)

2.第二位选手,采用file.Transto 来保存上传的文件,这是目前我认为最好的上传方式,也是我最喜欢的上传方式,代码简单,速度快。请看下面代码。

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( "采用file.Transto的运行时间:" +String.valueOf(endTime-startTime)+ "ms" );          return  "/success" ;       }

  3.第三种采用流的方式上传,这种方法在新手学习的时候经常用到,但是我并不喜欢,因为它又慢又难写,请看

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 @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();              byte [] bts =  new  byte [ 1024 ];              //一个一个字节的读取并写入              while (is.read(bts)!=- 1 )              {                  os.write(bts);              }             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.分别选择同一个文件,稍微大一点(我这里上传的zookeeper3.3.6的安装包,大小为11M),以区别处他们的耗时差异(最好不实用ie,很容易崩溃,亲测)

  

  3.统计耗时,请看下图,结果一目了然。

 

 在此补充说明一点,如果你认为采用流的方式上传慢是因为我这里内存开辟小了,可以尝试开大一点,但是依然不影响他的速度最慢的地位,如果内存开的过大,反倒影响速度。

以上内容仅供学习,如果有需要源码的,请联系我。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3