代碼如下:
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}"就可以嗎。讀取音樂的時候是不是一樣的方式?
realpath是實際路徑,文件上傳時需要這個完整的路徑才能知道傳到哪。
imagePath這個只是保存到數據庫的路徑,由於是服務器端,我們只要知道在當前站點根目錄下的路徑即可。由於是相對路徑,項目中引用圖片顯示的時候,可以直接用這個路徑。