zoukankan      html  css  js  c++  java
  • Insert title here

    直接上代码吧,大伙一看便知
    https://www.cnblogs.com/fjsnail/p/3491033.html
    /*<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>

    Insert title here

    采用流的方式上传文件

    采用multipart提供的file.transfer方法上传文件

    使用spring mvc提供的类的方法上传文件

    配置: */ 后台:

    方式一:
    /*
    * 通过流的方式上传文件
    * @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"; 
    }
    

    方式二:

    /*
    * 采用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"; 
    }
    

    方式三:

    /*
    *采用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

    从测试结果我们可以看到:用springMVC自带的上传文件的方法要快的多!

    对于测试二的结果:可能是方法三得挨个搜索,所以要慢点。不过一般情况下我们是方法三,因为他能提供给我们更多的方法

  • 相关阅读:
    learning scala view collection
    scala
    learning scala dependency injection
    learning scala implicit class
    learning scala type alise
    learning scala PartialFunction
    learning scala Function Recursive Tail Call
    learning scala Function Composition andThen
    System.Threading.Interlocked.CompareChange使用
    System.Threading.Monitor的使用
  • 原文地址:https://www.cnblogs.com/king8/p/11353257.html
Copyright © 2011-2022 走看看