Spring 中Apache Commons上传文件

在用Apache Commons完成文件上传功能需有的几步:

1、导入两个架包:commons-fileupload.jar和commons-io.jar

maven中:

 1 <dependency>
 2         <groupId>commons-fileupload</groupId>
 3         <artifactId>commons-fileupload</artifactId>
 4         <version>1.3</version>
 5     </dependency>
 6     
 7     <dependency>
 8         <groupId>commons-io</groupId>
 9         <artifactId>commons-io</artifactId>
10         <version>2.4</version>
11     </dependency>

2、修改配置文件,在spring-servlet中添加一个bean,代码如下:

 1 <!-- 处理上传文件 -->
 2     <bean id="multipartResolver"
 3         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
 4         <!-- set the max upload size100MB -->
 5         
 6         <!-- 设置最大文件大小 -->
 7         <property name="maxUploadSize">
 8             <value>104857600</value>
 9         </property>
10         <!-- 设置最大内存大小 --> 
11         <property name="maxInMemorySize">
12             <value>10240</value>
13         </property>
14         <!-- 设置上传后的目录名 -->
15         <property name="uploadTempDir">
16         <value>"./upload/"</value>
17         </property> 
18     </bean>
19     

注意这里配置的上传的目录名是临时的,并不是上传文件后文件所在的位置,这里只是缓存用的。文件上传后真正的位置要在Controller中指出

3、jsp页面和Controller中的内容

jsp页面:

1 <form action="./handleUploadData" method="post" enctype="multipart/form-data">
2    文件名:<input type="text" name="name"><br>
3           <input type="file" name="file">
4 <input type="submit" class="btn btn-primary" value="上传">
5 </form>

这里的文件名是在为了在保存上传文件时便于区分文件,上传的文件已用户输入的文件名显示

Controller:

 1  private ServletContext servletContext;
 2     
 3     @Override
 4     public void setServletContext(ServletContext context){
 5         this.servletContext =context;
 6     }
 7     
 8     @RequestMapping("**/handleUploadData")
 9     //在上传时,@RequestParam("file")必须加,不然就会出现错误
10     public String handleUploadData(String name,@RequestParam("file") CommonsMultipartFile file){
11         
12         if(!file.isEmpty()){
13             String path=this.servletContext.getRealPath("/upload/");  //获取本地存储路径    
14             
15             String fileName=file.getOriginalFilename();
16             
17             String fileType=fileName.substring(fileName.lastIndexOf("."));  //获取上传文件的类型
18             System.out.println(fileType);
19             File file2=new File(path,name+fileType);  //新建一个文件
20             
21             
22             
23             try {
24                 file.getFileItem().write(file2);  //将上传的文件写入新的文件中
25             } catch (Exception e) {
26                 // TODO Auto-generated catch block
27                 e.printStackTrace();
28             }
29             return "upload_ok";
30         }
31         else{
32             return "upload_error";
33         }
34     }
原文地址:https://www.cnblogs.com/John-Lyn/p/3897525.html