在一個實際項目中,總是不可避免的需要向服務器上傳文件。對於大多數的文件存儲,我們一般是將文件的路徑存入數據庫,通過路徑獲得文件。這裏有兩種方法,一種是存在webcontent中,一種是存入主機的硬盤中。從長遠的角度來看,我個人比較贊成存在主機硬盤中。這裏不得不解決一個問題。咱們的jsp文件是在tomcat容器中,無法訪問容器外的資源(移動端同理)。因此,我們需要設置虛擬路徑。
設置虛擬路徑有很多方法,這裏我提供一種方法。
在tomcat中的conf/server.xml中<host></host>之間增加代碼。
<Context path="/upload" docBase="/Users/xuxuxiao/Documents/upload/" reloadable="true">
</Context>
path指的是相對路徑,docbase指的是絕對路徑。可以這麼理解。我們在使用時用/upload/xxx相當於/Users/xuxuxiao/Documents/upload/xxx
這樣之後,需要重啓服務器。如果報404,將項目重新加入tomcat即可。
在這裏順便貼上我存儲文件的代碼。
private String saveFile(HttpServletRequest req, MultipartFile multipartFile,String id) {
// TODO Auto-generated method stub
if (!multipartFile.isEmpty()) {
//文件上傳到的位置
//String filepathString=req.getServletContext().getRealPath("/")+"upload/"+multipartFile.getOriginalFilename();
String filepathString="/Users/xuxuxiao/Documents/upload/"+id+"/"+multipartFile.getOriginalFilename();
File newfileFile=new File(filepathString);
if (!newfileFile.getParentFile().exists()) {
newfileFile.getParentFile().mkdirs();
}
try {
multipartFile.transferTo(newfileFile);
return "/upload/"+id+"/"+multipartFile.getOriginalFilename();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
return null;
}
ps:如果客戶端要訪問這個文件,則使用ip+端口+相對路徑。這樣就可以訪問到這個文件。