fj24911 2009-08-20 15:17
浏览 407
已采纳

关于上传图片中服务器的地址的问题

最近在做一个服装网站的项目,用的是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()返回的服务器地址就是一个统一的物理地址。不知道理解得对不对

  • 写回答

17条回答 默认 最新

  • wanghaolovezlq 2009-08-25 13:42
    关注

    理解是对的,这api就是这样

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(16条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)