SpringMVC上傳文件的三種方式(轉帖)


/*
     * 通過流的方式上傳文件
     * @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自帶的上傳文件的方法要快的多!

對於測試二的結果:可能是方法三得挨個搜索,所以要慢點。不過一般情況下我們是方法三,因為他能提供給我們更多的方法

 

原貼鏈接 https://blog.csdn.net/qq_20545159/article/details/48572061


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM