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 文件上传基本就是这些,希望能对大家有所帮助,欢迎过路的各位指点批评。*

原文地址:https://www.cnblogs.com/Mr-Dawei/p/7424799.html