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

    SpringMVC文件上传

    SpringMVC对文件的上传下载,做了自己较为方便的操作方式,一下是我近期学习的小记,希望能对大家有所帮助。

    • 文件的上传主要包含一下几个步骤:
    • 1、导入需要使用的jar包;(只要是使用别人的内容就要使用导包,导包)
    • 2、配置SpringMVC的配置文件
    • 3、书写上传页面
    • 4、编写上传Controller

    1、导入jar包

    • commons-fileupload-1.3.1.jar
    • commons-io-2.4.jar

    当然SpringMVC的基础包也是要导入的

    2、配置SpringMVC的配置文件

    1 <!-- 设置文件上传 -->
    2 
    3        <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    4               <!-- 编码方式 -->
    5               <property name="defaultEncoding" value="UTF-8" />
    6               <!-- 文件大小 -->
    7               <property name="maxUploadSize" value="1048576"></property>
    8        </bean>

    3、书写上传页面

    其中要特别注意的是:文件上传,需要设定请求方式为POST

    并且需要将enctype属性设为“multipart/form-data" ,其不会对字符进行编码,,一般用于传输二进制文件(图片、视频、、、)。其在默认情况下是application/x-www-form-urlencoded:表单数据被编码为名称/值对,这是默认的编码方式(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值), text/plain:表单数据中的空格转换为 "+" 加号,但不对特殊字符编码。(get方式会这样,post时不会)。其个中区别我也不是很理解,去发掘学习吧。

    1 <form action="${pageContext.request.contextPath }/testUpLoad" method="post" enctype="multipart/form-data">
    2               File:<input type="file" name="myfile"  />
    3               Des: <input type="text" name = "mydesc" />
    4               <input type="submit" value="提交" />
    5 </form>

    4、编写上传Controller

    在文件上传中我使用了两种方式,一种是原生的方式,一种是Spring中CommonsMultipartFile  提供的方法。

     1 //文件上传
     2 
     3 @RequestMapping(value="/testUpLoad",method = RequestMethod.POST)
     4 
     5 public String testUpLoad(@RequestParam(value="myfile",required=false)
     6             CommonsMultipartFile  myfile,@RequestParam(value="mydesc") String mydesc,
     7                 HttpServletRequest request){
     8 
     9             if(myfile.isEmpty()){
    10                    System.out.println("文件不存在");
    11             } else{
    12                  
    13                    //获取上传的文件名
    14                    String fileName = myfile.getOriginalFilename();
    15                    System.out.println("上传的文件名为:  "+fileName);
    16 
    17                    /*重新定义上传文件名,也就是存储时的名字,
    18                 *这里了避免上传后覆盖原本的文件,就是用了UUID的方式更改了命名 
    19                 */
    20                    String myFileName = UUID.randomUUID().toString().replace("-", "") +fileName;
    21                    System.out.println("重新定义的上传文件的名  :"+myFileName);
    22 
    23                    //服务器地址 获取服务器的地址首先要在其WEB-INF目录下存在一个upload文件,否则会出错
    24                    String serverPath = request.getServletContext().getRealPath("/WEB-INF/upLoad");
    25                    System.out.println("服务器文件存储的地址:"+serverPath);
    26 
    27                    //以下是原生的方法
    28                    InputStream iS =null;
    29                    FileOutputStream fOS = null;
    30              
    31                    try {
    32                       /*创建输出流,并且新建了文件 地址目录是服务器目录,
    33                 *文件名为刚才定下的新名字
    34                 */
    35                           fOS = new FileOutputStream(new File(serverPath,myFileName));
    36                           //获取页面上选中文件的字节流
    37                       iS = myfile.getInputStream();
    38                           //使用存储缓冲
    39                           byte[] by = new byte[2048];
    40                           int len = iS.read(by);
    41                           while(len!=-1){
    42                          /*这里的len很有必要,在最后一次读取的时候可能没有将byte填满,
    43                    * 因此就要将读入长度的内容写出。
    44                    */ 
    45                                  fOS.write(by, 0, len);
    46                                  len = iS.read(by);
    47                           }
    48                    } catch (IOException e) {
    49                           // TODO Auto-generated catch block
    50                           e.printStackTrace();
    51                    } finally {
    52                           //关闭流
    53                           try {
    54                                  if(fOS!=null){
    55                                         fOS.close();
    56                                  }
    57                                  if(iS!=null){
    58                                         iS.close();
    59                                  }
    60                           }catch (IOException e) {
    61                                         // TODO Auto-generated catch block
    62                                         e.printStackTrace();
    63                                  }
    64                           }
    65                    }
    66 
    67             /* //下面是SpringMVC提供的方法           
    68 
    69                    File upFile = null;
    70                    //创建存储文件
    71                    upFile = new File(serverPath,myFileName);
    72                    if(!upFile.exists()){
    73                           upFile.mkdirs();
    74                    }
    75                    try {
    76                           //进行文件传输,Spring中提供的方法,直接将文件复制
    77                           myfile.transferTo(upFile);
    78                    } catch (IllegalStateException e1) {
    79                           // TODO Auto-generated catch block
    80                           e1.printStackTrace();
    81                    } catch (IOException e1) {
    82                           // TODO Auto-generated catch block
    83                           e1.printStackTrace();
    84                    }*/
    85             return "success";
    86      }

    关于SpringMVC 文件上传基本就是这些,希望能对大家有所帮助,欢迎过路的各位指点批评。*

  • 相关阅读:
    西子凌波26: 看各路新秀 2015-04-19
    西子凌波21:美元 2015-03-19
    西子凌波04:再读 教你炒股票104:几何结构与能量动力结构1有感 2011-05-23
    西子凌波08:闲聊~~共勉~~ 感恩缠主 2013-12-07
    西子凌波07:传统底部形态缠论解析 2011-10-26
    西子凌波03:缠论中的MACD 2011-05-21
    数组内Merge
    leetcode -- Decode Ways
    leetcode -- Distinct Subsequences
    leetcode -- permutation 总结
  • 原文地址:https://www.cnblogs.com/Mr-Dawei/p/7424799.html
Copyright © 2011-2022 走看看