我怎样才能显示在用户详细信息的页面动态照片[复制](how can i display a dyna

2019-09-23 10:58发布

可能重复:
从与对数据库显示图像:graphicImage的

我希望显示存储在数据库中的URL中的照片,所以我用如下

                <h:panelGrid columns="1">
                    <p:graphicImage value="#{userController.photo}"/> 
                </h:panelGrid>

和照片属性是指向照片位置的URL字符串

public String getPhoto() {
   String path = new File("").getAbsolutePath();
   ph =ejbPhoto.find(current.getIdPhoto()); 
   System.out.println("+PHOTO +++++++++++++++"+path+"\\"+ph.getPhotoName()); 
   return path+"\\"+ph.getPhotoName();
}

在的System.out.println显示图像的显示页面未显示照片,所以任何想法,但在正确的道路?

Answer 1:

首先, new File("").getAbsolutePath()返回当前的工作目录。 即这是在瞬间打开本地磁盘文件系统目录中指定的命令来启动服务器。 此值不能保证在服务器启动相同每次。 这取决于服务器的启动方式。 例如在IDE,或在命令控制台,或由服务等

你绝对不应该让你的业务逻辑依赖于这样的环境不一致。

其次,将所生成的HTML <img src>具有指向一个URL(一个HTTP路径),而不是在本地磁盘文件系统路径。 这是即谁得到了由一个单独的URL下载图像,如网页浏览器http://example.com/contextname/images/foo.png (因此没有谁拥有,自动将它们嵌入在HTML代码或使网络服务器) 。 您当前密码的做法只会工作,如果new File("")指向部署Web应用程序,这是非常,非常不可能的公共网站的内容文件夹。

你应该确保在<img src>指向一个有效的HTTP URL,正是一个你可以在Web浏览器的地址栏中copypaste。


目前还不清楚为什么你设计这样说,这和你的企业的限制是什么,所以它不可能发布一个合适的答案如何正确地解决它。 因此,这里有几个环节出解决这个的(轻微)不同的方式:

  • 如何显示服务器的路径图像PrimeFaces号码:graphicImage的?
  • 最简单的方式来服务于Java Web应用程序从应用服务器以外的静态数据
  • <:graphicImage的H>或<img>标签从web应用/ webcontext /以外加载图像使用部署夹


Answer 2:

我的两分钱。 使用图像的URL可能会暴露你的目录结构与任何人firebug或类似的东西。 一些不好的事情由此发生,我不使用与我的应用程序服务器的文件系统文件路径,如果我能帮助它的粉丝。 如果您的实施支持的话,我建议你使用服务primefaces'从数据库中的图像DynaImage



Answer 3:

解决方法很简单和照片的路径是NetBeans项目的Web文件夹下(项目\编译\网络\摄)

<h:panelGrid columns="1" width="50%" >
                    <p:graphicImage value="/photo/#{userController.photo}"/> 
  </h:panelGrid>

而在照片get方法,我把:

public String getPhoto() {

   ph =ejbPhoto.find(current.getIdPhoto()); 
   if(ph==null) return "noPhoto.png";
   System.out.println(ph.getPhotoName()); 
   current=null;
    return ph.getPhotoName();
}

和照片名称包括扩展名。



文章来源: how can i display a dynamic photo in the user detail's page [duplicate]