七叶笔记 » java编程 » java中如何上传文件

java中如何上传文件

在java里面文件上传的方式很多,最简单的依然是FileInputStream、FileOutputStream了,在这里我列举3种常见的文件上传方法代码

首先呢,使用springMVC原生上传文件方法,需要一些简单的配置,不多说,上图。 (推荐学习:java课程)

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

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

/*     * 采用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.第三种采用流的方式上传,这种方法在新手学习的时候经常用到,但是我并不喜欢,因为它又慢又难写,请看

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

简单的文件上传页面

java-46.png

相关文章