最近在做一个服装网站的项目,用的是Eclipse,Svn,其中有一个增加功能,要上传图片都服务器上,
于是在写目标地址的是很出现了一些问题:
[code="java"]
//产生一个日期加五位随机数的文件名
SimpleDateFormat gs = new SimpleDateFormat("yyyyMMddHHmmss");
String time = gs.format(new Date());
String imageFileName = time + getRandom() + getExtention(fileName);
//获取项目名
String sp = ServletActionContext.getRequest().getContextPath();
String spath = sp.substring(1, sp.length());
// 获取目标地址
String[] str = ServletActionContext.getServletContext().getRealPath("/").split(".metadata");
//UploadImage是规定图片上传到服务器的文件夹
File imageFile = new File(str[0] + spath + "\Webroot\UploadImages\"+ imageFileName);
[/code]
,但数据库中地址那个字段显示的是:E:\Workspace\ctcs11\Webroot\UploadImages\2009081915322682855.jpg,我的项目Workspace在E盘,我想当用户通过浏览器访问的是他本地的E:\Workspace\ctcs11\Webroot\UploadImages\2009081915322682855.jpg,肯定是找不到的,有什么可以改正的。
还有我们组的workspace都不统一,所以数据库中的地址也是乱七八糟的有D盘的,有E盘的,
1.想问下是不是目的地址方法有误
2.ServletActionContext.getServletContext().getRealPath("/").split(".metadata");为什么取值是E:\Workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ctcs11
[b]问题补充:[/b]
重新调试了下
System.out.println(ServletActionContext.getServletContext().getRealPath("/"));
System.out.println(ServletActionContext.getServletContext().getRealPath(""));
结果显示为:
E:\Workspace.metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\ctcs11\
E:\Workspace.metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\ctcs11
[b]问题补充:[/b]
lovewhzlq:因为是SVN版本控制的,是在Eclipse中check out出来做的 映射到我本地上就是E:\Workspace\ctcs11
saiyaren :能不能具体讲一下,什么东西大家不需要看到,用户是通过action从数据库中取图片的值,然后显示在页面上的,这样数据库中地址是E:\Workspace\ctcs11\Webroot\UploadImages\2009081915322682855.jpg,不是有问题吗
[b]问题补充:[/b]
xman :我现在的问题是在数据库写的地址是本地的一个绝对地址,,如果每个客户上传时都上传本地的一个绝对地址,那其他客户到数据库取值的时候不是取不到吗
[b]问题补充:[/b]
lovewhzlq :那我这边代码应该怎么写能不能详细说一下?
saiyaren:上传到指定的文件夹后,取图片时,由于许多图片都放在一起,由于我要对图片显示进行一个选择,比方说选择state为0的图片,所以我还是通过action访问数据库,然后将从数据库取到的集合放到session中,然后在页面
img src="${}"调用,所以取值时不会绕过数据库的
[b]问题补充:[/b]
补充一下:用SVN将项目check out出来以后,那么我用getRealPath时虽然取得是服务器地址,但服务器映射在本地,所以取得是E:\Workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ctcs11
这种地址
如果项目部署好后,是 不是用户访问时,getRealPath()地址就会变成
http://XXX:8080/.......这样的格式
[b]问题补充:[/b]
现在的问题是我对getRealPath这个方法返回的值不清楚
E:\Workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ctcs11 或http://XXX:8080/.......这样的格式哪一种
[b]问题补充:[/b]
lovewhzlq :不知道我这样理解对不对:由于getRealPath()返回服务器端的物理地址,当我们用SVN check out到本地做的,本地既是服务器端又是客户端,当我们访问时采用http://localhost:8088/项目名运行时,由于都是访问的各自的本地服务器物理路径(也就是服务器映射到本地的地址),所以会出现
E:,D:这样的字样,如果部署好以后,用户访问时,getRealPath()返回的服务器地址就是一个统一的物理地址。不知道理解得对不对