zoukankan      html  css  js  c++  java
  • spring mvc 上传文件

    1、spring-servlet.xml配置:

        <!-- 处理文件上传 -->
        <bean id="multipartResolver"
            class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="uft-8" /> <!-- 默认编码 (ISO-8859-1) -->
            <property name="maxInMemorySize" value="10240" /> <!-- 最大内存大小 (10240)-->
            <property name="uploadTempDir" value="/upload/" /> <!-- 上传后的目录名 (WebUtils#TEMP_DIR_CONTEXT_ATTRIBUTE) -->
            <property name="maxUploadSize" value="-1" /> <!-- 最大文件大小,-1为无限止(-1) -->
        </bean>

     第一种方法:采用流的方式上传文件

    jsp文件:

       <form name="Form1" action="/spmvc/upload/file1" method="post"
    
          enctype="multipart/form-data">
    
          <h3>采用流的方式上传文件</h3>
    
          <input type="file" name="file">
    
          <input type="submit" value="upload" />
    
       </form>

    java文件:

    @Controller
    
    @RequestMapping("upload")
    
    public class FileUploadController6 {
    
       //采用流的方式上传文件
    
       @RequestMapping("file1")
    
       public String file1(@RequestParam("file")CommonsMultipartFile file){
    
           //用来检测程序运行时间
    
            long  startTime=System.currentTimeMillis();
    
            System.out.println("fileName:"+file.getOriginalFilename()); 
    
          String name = file.getOriginalFilename();
    
          if(!file.isEmpty()){
    
             try {
    
                String path = "D:/"+new Date().getTime()+"-"+name;
    
                FileOutputStream  fos = new FileOutputStream(new File(path));
    
                InputStream is = file.getInputStream();
    
                int temp;
    
                byte[] b = new byte[1024];
    
                while((temp = is.read(b))!=-1){
    
                    fos.write(b);
    
                }
    
                fos.flush();
    
                fos.close();
    
                is.close();
    
                long  endTime=System.currentTimeMillis();
    
                System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");
    
               
    
                return "/6-upload/upload-success";
    
             } catch (FileNotFoundException e) {
    
                e.printStackTrace();
    
             } catch (IOException e) {
    
                e.printStackTrace();
    
             }
    
          }
    
          return "/6-upload/upload-error";
    
       }
    
    }

    运行时间:

    fileName:java_ee_javadocs.zip

    方法一的运行时间:128ms

    第二种方法:采用multipart提供的file.transfer方法上传文件

    jsp文件:

       <form name="Form2" action="/spmvc/upload/file2" method="post"
    
          enctype="multipart/form-data">
    
          <h3>采用multipart提供的file.transfer方法上传文件</h3>
    
          <input type="file" name="file">
    
          <input type="submit" value="upload" />
    
       </form>

    java文件:

    @Controller
    
    @RequestMapping("upload")
    
    public class FileUploadController6 {
    
       //采用multipart提供的file.transfer方法上传文件
    
       @RequestMapping("file2")
    
       public String file2(@RequestParam("file") CommonsMultipartFile file){
    
          long startTime = System.currentTimeMillis();
    
          System.out.println("fileName:"+file.getOriginalFilename());
    
          String path = "D:/"+new Date().getTime()+"-"+file.getOriginalFilename();
    
          File newFile = new File(path);
    
          try {
    
             file.transferTo(newFile);
    
             long endTime = System.currentTimeMillis();
    
             System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");        
    
             return "/6-upload/upload-success";
    
          } catch (IllegalStateException e) {
    
             e.printStackTrace();
    
          } catch (IOException e) {
    
             e.printStackTrace();
    
          }    
    
          return "/6-upload/upload-error";
    
       }
    
    }

    运行时间:

    fileName:java_ee_javadocs.zip

    方法二的运行时间:1ms

    第三种方法:使用spring mvc提供的类的方法上传文件

    jsp文件:

       <form name="Form3" action="/spmvc/upload/file3" method="post"
    
          enctype="multipart/form-data">
    
          <h3>使用spring mvc提供的类的方法上传文件</h3>
    
          <input type="file" name="file">
    
          <input type="submit" value="upload" />
    
       </form>

    java文件:

    @Controller
    
    @RequestMapping("upload")
    
    public class FileUploadController6 {
    
       //使用spring mvc提供的类的方法上传文件
    
       @RequestMapping("file3")
    
       public String file3(HttpServletRequest request){
    
          long startTime = System.currentTimeMillis();
    
          //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)
    
    //    ServletContext c1 = request.getSession().getServletContext();
    
    //    ServletContext c2 = request.getServletContext();
    
    //    System.out.println(c1==c2);//从request和session中获取到的servletContext是同一个对象
    
          CommonsMultipartResolver  multipartResolver = new CommonsMultipartResolver(request.getServletContext());
    
           //检查form中是否有enctype="multipart/form-data"
    
          if(multipartResolver.isMultipart(request)){
    
             MultipartHttpServletRequest  multipartRequest = (MultipartHttpServletRequest)request;
    
             Iterator<String> iterator = multipartRequest.getFileNames();
    
             while(iterator.hasNext()){
    
                MultipartFile  file  = multipartRequest.getFile(iterator.next());
    
                String path = "D:/"+new Date().getTime()+"-"+file.getOriginalFilename();
    
                try {
    
                    file.transferTo(new File(path));
    
                } catch (IllegalStateException e) {
    
                    e.printStackTrace();
    
                    return "/6-upload/upload-error";
    
                } catch (IOException e) {
    
                    e.printStackTrace();
    
                    return "/6-upload/upload-error";
    
                }
    
             }
    
          }
    
          long endTime = System.currentTimeMillis();
    
          System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");
    
          return "/6-upload/upload-success";
    
       }
    
    }

    运行时间:

    fileName:java_ee_javadocs.zip

    方法三的运行时间:1ms

     一次上传多个文件

    jsp文件:

       <form name="Form4" action="/spmvc/upload/file3" method="post"
    
          enctype="multipart/form-data">
    
          <h3>使用spring mvc提供的类的方法上传多个文件</h3>
    
          <input type="file" name="file1" ><br/>
    
          <input type="file" name="file2" ><br/>
    
          <input type="file" name="file3" ><br/>
    
          <input type="file" name="file4" ><br/>
    
          <input type="submit" value="upload" />
    
       </form> 

    java文件:

    @Controller
    
    @RequestMapping("upload")
    
    public class FileUploadController6 {
    
       //使用spring mvc提供的类的方法上传文件
    
       @RequestMapping("file3")
    
       public String file3(HttpServletRequest request){
    
          long startTime = System.currentTimeMillis();
    
          //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)
    
    //    ServletContext c1 = request.getSession().getServletContext();
    
    //    ServletContext c2 = request.getServletContext();
    
    //    System.out.println(c1==c2);//从request和session中获取到的servletContext是同一个对象
    
          CommonsMultipartResolver  multipartResolver = new CommonsMultipartResolver(request.getServletContext());
    
           //检查form中是否有enctype="multipart/form-data"
    
          if(multipartResolver.isMultipart(request)){
    
             MultipartHttpServletRequest  multipartRequest = (MultipartHttpServletRequest)request;
    
             Iterator<String> iterator = multipartRequest.getFileNames();
    
             while(iterator.hasNext()){
    
                MultipartFile  file  = multipartRequest.getFile(iterator.next());
    
                String path = "D:/"+new Date().getTime()+"-"+file.getOriginalFilename();
    
                try {
    
                    file.transferTo(new File(path));
    
                } catch (IllegalStateException e) {
    
                    e.printStackTrace();
    
                    return "/6-upload/upload-error";
    
                } catch (IOException e) {
    
                    e.printStackTrace();
    
                    return "/6-upload/upload-error";
    
                }
    
             }
    
          }
    
          long endTime = System.currentTimeMillis();
    
          System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");
    
          return "/6-upload/upload-success";
    
       }
    
    }

    运行时间:

    fileName:java_ee_javadocs.zip

    方法三的运行时间:1ms

    从上面运行的情况来看,最后采用后两种方法。

  • 相关阅读:
    FileStreamResult 下载或导出文件
    .net core post自带的json序列化转换出错 post参数为null
    .net Core CodeFirst
    获得IP地址
    vue cli 3 以上添加Less支持
    npm淘宝镜像
    会话状态在此上下文中不可用HttpModule中无法访问Session原因
    Chrome谷歌浏览器中js代码Array.sort排序的bug乱序解决办法
    JS匿名函数递归实现阶乘
    JS URL解析
  • 原文地址:https://www.cnblogs.com/a198720/p/4045981.html
Copyright © 2011-2022 走看看