0

我正在运行 Eclipse Java EE 和 tomcat 来运行我的 webapp。我使用以下代码将图像文件存储到upload/images/profilepics 目录:

public String uploadPhoto() {
    try {
        //get path to upload photo
        String filePath = servletRequest.getSession().
                getServletContext().getRealPath("/uploads/profilepics");

        System.out.println("Server path:" + filePath);

        //creating unique picture name
        Map sess = (Map) ActionContext.getContext().get("session");
        Integer uid = (Integer) sess.get("uid");
        String profilePictureName = uid + "-" + 
                MyUtilityFunctions.createVerificationUrl() + this.userImageFileName;

        //update user record
        //tobe done 
        String imgUrl = filePath + profilePictureName;
        ViewProfileModel pofilePictureUpdate = new ViewProfileModel();
        pofilePictureUpdate.updateUserPhotoUrl(imgUrl, uid);

        //create new File with new path and name
        File fileToCreate = new File(filePath, profilePictureName);

        //copy file to given location and with given name
        FileUtils.copyFile(this.userImage, fileToCreate);
    } catch (Exception e) {
        e.printStackTrace();
        addActionError(e.getMessage());

        return INPUT;
    }
    return SUCCESS;
}

打印 filePath 后,我得到以下结果:

服务器路径:/home/bril/webspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/picvik/uploads/profilepics

现在的问题是,我无法获取图像,或者如果我将相同的 url 提供给<img src="">什么都没有显示。

请纠正我做错的地方。

4

1 回答 1

1

有以下建议:

  1. 有很多原因,您不应该以这种方式保存用户图像,就像 @DaveNewton 在另一个问题中提到的那样。有一些帖子可以帮助您做出决定:

    我个人的意见是将它们保存到数据库中,因为您不想让您的用户丢失他们的图像。

  2. 如果您需要访问会话,可以查看SessionAware。这应该是访问会话的更好方法。
  3. 您正在使用 tomcat 作为应用程序容器,您可以将服务器配置为使用其本地安装,这使您更容易在这种情况下跟踪问题。看看下面这张图片Tomcat 服务器位置

回到你的问题,有不同的方法可以做到这一点:

  • 如果找不到用户刚刚上传的图片,可以手动查看,见3。
  • 否则,您可以尝试<img src="/uploads/profilepics/<s:property value='profilePictureName'/>"
  • 或者你可以使用流来获取这张图片,这里是片段:

JSP:

    <img src="
        <s:url var="profilePic" action="customer-image-action">
            <s:param name="uid" value="%{uid}"/>
        </s:url>
    " alt="kunden logo" />

行动:

public String execute() throws Exception {
    // filename = somehow(uid);
    HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
    imgPath = request.getSession().getServletContext().getRealPath("/uploads/profilepics/")+filename;
    log.debug("context-path: " + imgPath);
    try {
        inputStream = FileUtils.openInputStream(new File(imgPath));
    } catch (IOException e) {
        log.error(e.getCause(), e);
    }
    return SUCCESS;
}
于 2012-12-19T11:02:49.790 回答