研究了两天终于搞定了,之前一直想着怎么能将文件上传到eclipse中项目的WebContent目录下,然后在别的页面将上传的图片打开,之前一直被绝对路径所误导,
取得路径的方式:
String realPath = ServletActionContext.getRequest().getRealPath("file");
但是在控制台输出的时候却是:
D:\JP\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\s2demo\
我就被这迷惑了,然后就一心想着怎么把这路径存到数据库,然后在别的页面上通过绝对路径来取得刚上传的文件,弄了一天没搞明白,搜了很多资料也没有彻底理解,今天晚上就想啊怎么解决呢,就试了一下使用相对路径来取,(图片不会弄)
在上传的时候将文件的路径存成相对路径的形式:
String path = "";
// 设置上传文件目录(其实这里设置的就是相对目录,只不过输出的绝对路径其实是tomcat部署之后的路径,总之完全可以当做相对路径来理解就对了)
String uploadPath = ServletActionContext.getServletContext()
.getRealPath("/image");
// 设置目标文件
if(!"".equals(this.getImageFileName())&& this.getImageFileName() != null){
File toFile = new File(new File(uploadPath), this.getImageFileName());
if(!toFile.getParentFile().exists()){
toFile.getParentFile().mkdirs();
}
FileUtils.copyFile(image, toFile);
//往数据库中存入相对路径
path = "../image/"+this.getImageFileName();
}
// path = path.replaceAll("\\\\", "\\\\\\\\") ;
SqlEditEdTjsjDao dao=new SqlEditEdTjsjDao();
dao.edit(id,path,title,author,p_date,company,content);
然后在页面上显示的时候完全就可以取得数据库里的路径直接用就可以了:
<img src="${tjsj.image_path }" />
至于为什么每次重启tomcat上传的文件都会消失,原因是因为从eclipse启动tomcat的时候会将tomcat之前部署的文件先删除再部署,所以之前上传的文件就丢失了,如果不通过eclipse就可以了。
eclipse运行tomcat是为了方便开发的。它默认是建立一个临时空间来运行项目的。并且随时保持于eclipse中项目的同步的。你如果直接将项目打成war包放在tomcat下的话,就不会有这样的问题了