一、簡介
通過把文件上傳到tomcat的虛擬目錄,實現代碼和資源文件分開。
二、環境
spring+springmvc+mybatis
三、代碼實現
1.導入文件上傳的jar
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
2.在springmvc.xml中配置multipart類型解析器
<!-- SpringMVC上傳文件時,需要配置MultipartResolver處理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8"/> <!-- 指定所上傳文件的總大小不能超過60000K。注意maxUploadSize屬性的限制不是針對單個文件,而是所有文件的容量之和 --> <property name="maxUploadSize" value="600000000"/> <property name="maxInMemorySize" value="600000000"/> </bean>
3.在tomcat下創建虛擬目錄
- 在tomcat的根目錄下創建一個名為FileDir的目錄(當然這個目錄也可以建立在其它的地方)
- 在tomcat的conf/server.xml,配置虛擬目錄。增加下面這行
<Context path="/FileDir" docBase="D:\tomcats\Tomcat7-8080-idea\FileDir"/>
- 添加一張圖片1.jpg到虛擬目錄中,並啟動tomcat測試。訪問:http://localhost:8080/FileDir/1.jpg。可以請求到圖片,說明配置成功。
4.springmvc上傳圖片到虛擬目錄
- jsp頁面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <title>測試頁</title> </head> <body> <h2>測試文件上傳</h2> <form action="upload" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="realname"><br> 頭像:<input type="file" name="picFile"><br> <input type="submit" value="上傳"> </form> <c:if test="${pic != null}"> <img src="/FileDir/${pic}" > </c:if> </body> </html>
- controller
@RequestMapping(value = "/upload",method = {RequestMethod.POST}) public String upload(MultipartFile picFile,String realname,Model model) throws Exception{ if(!picFile.isEmpty()){ System.out.println("realname:"+realname); //存儲圖片的路徑 String filePath = "D:\\tomcats\\Tomcat7-8080-idea\\FileDir\\"; String originalFilename = picFile.getOriginalFilename(); //獲取文件后綴名稱 String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); //新圖片名稱 String fileName = UUID.randomUUID().toString()+suffix; //上傳圖片 File newFile = new File(filePath+fileName); picFile.transferTo(newFile); //返回頁面 model.addAttribute("pic",fileName); } return "test"; }