最近做項目用到文件上傳功能用的是tomcat6以上版本(tomcat6不支持我的jre版本所以沒有用).使用該路徑:String directoryRealPath =servlet.getServletContext().getRealPath(“/WEB-INF/Files”);時可以把文件上傳,但是路徑是在服務器webapp下的項目裏,每次clean/redeploy或重啓服務器時都會把上傳的文件給清除了(不知道爲什麼我其他同學用tomcat6卻不會出現這個問題的說).在網上找了幾個方法說虛擬路徑可以用(只有配置,沒有使用過程),所以就使用了虛擬路徑上傳把我的經驗寫下來,希望能幫到需要幫助的人
1.首先在tomcat安裝目錄找到server.xml文件,然後找到標籤(一般在最後),在裏面添加該配置:
<Context path="/upload/images" docBase="D:\apache-tomcat\apache-tomcat-8.0.26\upload\images"></Context>
<Context path="/upload/file" docBase="D:\apache-tomcat\apache-tomcat-8.0.26\upload\file"></Context>
- path: 表示虛擬目錄的名稱(前面的正斜槓“/”可以省略)
- docBase:可以設置絕對路徑,也可設置相對路徑,相對路徑是相對 appBase 屬性所設的目錄而言的
- reloadable:表示修改應用程序後,tomcat自動幫你部署(reload),不用重新啓動
修改完以上配置後需重啓服務器方能生效的說
2.把你的文件上傳到該虛擬路徑
String filePath="D:" + File.separator + "apache-tomcat" + File.separator
+ "apache-tomcat-8.0.26" + File.separator + "upload" + File.separator + "images";
File storeDirectory = new File(filePath);
if (!storeDirectory.exists()) {
storeDirectory.mkdirs();
}
上傳文件時把文件傳入你的設置的虛擬路徑即可(恕我笨拙,我也只能寫這樣的死路經,試了網上的好多方法都不能把文件寫入項目工作目錄或其他非服務器webapp目錄)
3.訪問或讀取寫入數據庫的路徑
- 代碼訪問:
String path=request.getContextPath();
String directoryRealPath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/upload/images";
File storeDirectory = new File(directoryRealPath);
- url訪問:
http://localhost:8080/upload/images/a.jpg
- jsp獲取:
<img src="http://localhost:8080/upload/images/${b.imgurl}"/>