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 }