ServletActionContext.getServletContext().getRealPath("/UploadImages")
获取的结果可能是windows:"d:/tomcat/webapps/projectname/UploadImages"
linux:"/usr/local/tomcat5/webapps/projectname/UploadImages" 可以看到,我们只要获取ServletContext就可以获取文件在不同服务器上的物理路径了。而且操作都是在你部署项目的文件目录下。这样你在通过File对象来操作你的文件和文件夹就显得轻而易举了。剩下的就是结合你的业务需求,将你的物理绝对路径加上你想组合的相对路径完成你的代码了。
正确方法
xxx.split("////");
原因如下:
在Java中处理一些路径相关的问题的时候,如要取出ie浏览器上传文件的文件名,由于ie会把整个文件路径都作为文件名上传,需要用java.lang.String中的replaceAll或者split来处理。如:
上传文件路径为:C:/Documents and Settings/collin/My Documents/111-lazyloading.gif,欲取出文件名:111-lazyloading.gif。可以
String temp[] = name.split("////");
if (temp.length > 1) {
name = temp[temp.length - 1];
}
regex为////,因为在java中//表示一个/,而regex中//也表示/,所以当////解析成regex的时候为//。
由于unix中file.separator为斜杠"/",下面这段代码可以处理windows和unix下的所有情况:
String temp[] = name.replaceAll("////","/").split("/");
if (temp.length > 1) {
name = temp[temp.length - 1];
}
DATE:2010-07-15 hzg
String basePath = request.getContextPath();
basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+basePath+"/";
String servletPath = request.getServletPath();
String realPath=request.getRealPath("")+"//";
//根据上传时间,生成不同的文件夹
String currFoder = m1.createFolder(realPath,uploadDate);
//文件保存目录路径
String savePath = realPath+currFoder;
//文件下载路径
String fileName = dto.getFileName("fileName");
String downLoadPath = basePath+currFoder+"/"+fileName;
//文件输出路径:
savePath========>>D:/Tomcat5.5/webapps/testProject/upload/2010-07-15/2010-07-15第1次.doc
downLoadPath===>>http://localhost:8081/testProject/upload/2010-07-15/2010-07-15第1次.doc
/**
* 创建存放上传文件的文件夹,如果不存在则自动创建
* @param realPath
* @param uploadDate
* @return
*/
public String createFolder(String realPath,String uploadDate){
String currFoder = "upload/"+uploadDate;
String fileFoder = realPath+currFoder;
FileOperate op = new FileOperate();
op.newFolder(fileFoder); //调用newFolder()方法创建文件夹
return currFoder;
}