上传图片和音乐的路径问题

代码如下:

private static final long serialVersionUID = 572146812454L;
private File image; // 上传的文件
private String imageFileName; // 文件名称
private String imageContentType; // 文件类型
User user = (User) ActionContext.getContext().getSession().get("user");
private HttpServletResponse response = ServletActionContext.getResponse();
private HttpServletRequest request = ServletActionContext.getRequest();

private List picList;

public List getPicList() {
return picList;
}

public void setPicList(List picList) {
this.picList = picList;
}

private String picId;

private String userId;

private String commentPic;

//省略getter和setter

public String uploadPicture() throws IOException {
String s = UUID.randomUUID().toString();
String lastName = imageFileName.substring(imageFileName
.lastIndexOf(".") + 1, imageFileName.length());
String name = s + "." + lastName;
username = user.getUsername();
//获取服务器路径
String realpath = ServletActionContext.getServletContext().getRealPath(
"/upload");
System.out.println("realpath: " + realpath);
if (image != null) {
File savefile = new File(new File(realpath), name);
if (!savefile.getParentFile().exists())
savefile.getParentFile().mkdirs();
FileUtils.copyFile(image, savefile);
String imagePath = "/sDemo/upload/" + name;
System.out.println("imagePath: " + imagePath);
Picture picture = new Picture();
picture.setUserId(user.getId());
picture.setUserName(user.getUsername());
picture.setPictureUrl(imagePath);
ser.insertPicture(picture);
}
return "upload";
}

我想知道 String realpath = ServletActionContext.getServletContext().getRealPath("/upload");里"/upload"是干什么的?和 String imagePath = "/sDemo/upload/" + name;里的upload有关系吗?
我用这个上传图片上传了一张图片,但是在imagepath路径下并没有看到图片,是存到了realpath下吗?既然这样为什么要将url=imagepath存入数据库而不是存realpath?
上传的图片是不是实际上存在tomcat上的realpath下,通过imagepath存取?这两个路径之间通过什么建立关系?读取图片的时候读取<img src="${pictureUrl}"就可以吗。读取音乐的时候是不是一样的方式?

3个回答

realpath是实际路径,文件上传时需要这个完整的路径才能知道传到哪。
imagePath这个只是保存到数据库的路径,由于是服务器端,我们只要知道在当前站点根目录下的路径即可。由于是相对路径,项目中引用图片显示的时候,可以直接用这个路径。

u014337927
cd86254081 好的,我再理解下。谢谢了。
4 年多之前 回复
guwei4037
极简吧 回复cd86254081: 变量名和工程中的文件夹名不要混为一谈,没有半点关系。你不要老是纠结什么自动对应,对比下imagepath和realpath有什么不同,再看看我之前的回复就一清二楚了。
4 年多之前 回复
u014337927
cd86254081 回复guwei4037: 是不是因为都在uploadPicture()里所以imagepath和realpath就自动对应了。那我imagepath的取名也可以随便取吗,什么songpath之类的
4 年多之前 回复
guwei4037
极简吧 回复cd86254081: imagepath路径就是相对路径。你这是上传图片,数据库只需要保存相对web工程的路径就行了。真正读取文件的时候还是用realpath。
4 年多之前 回复
u014337927
cd86254081 那我输入url=imagepath的时候它是怎么知道要从realpath提取文件呢,是因为命名规则吗。。imagepath路径就是相对路径吗
4 年多之前 回复
guwei4037
极简吧 回复cd86254081: realpath和imagepath不需要联系,要说有什么关系的话,也就是upload开始往后的字符串是一致的。realpath是图片的完整路径(本地读取时使用),而imagepath是图片的相对路径(网络web页面显示时使用)
4 年多之前 回复
u014337927
cd86254081 回复guwei4037: 那realpath和imagepath是怎么联系起来的呢,我从imagepath里取东西的时候不是直接从realpath里获取文件了吗
4 年多之前 回复
guwei4037
极简吧 upload是在工程里面建立的文件夹,用于存放上传文件的,名字随便起。
4 年多之前 回复
u014337927
cd86254081 这个相对路径和绝对路径是怎么建立起联系的呢?是通过getpath()里的"upload"吗,这个upload又代表了什么意思呢
4 年多之前 回复
 看着两者关系
 String realpath = ServletActionContext.getServletContext().getRealPath(
"/upload");
String imagePath = "/sDemo/upload/" + name;
应该指web工程的项目名称是sDemo吧。如果项目名称是sDemo,那这两个路径就是一致的了。

sDemo是工程名称。。求详细点讲解啊。。急着做一个音乐播放器的功能上传这儿卡了很久了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!