通过Java从OpenDJ ldap中检索图片

时间:2015-07-31 14:57:59

标签: java ldap jndi opendj

我已经通过OpenDJ控制面板向用户添加了一张图片,但我似乎无法检索该图片,因此我可以在网页上显示它。我找到了两个属性 thumbnailPicture 照片,并试图通过以下方式访问它:

NamingEnumeration<?> namingEnum = ctx.search(baseFilter, "(uid="+username+")", searchControls);

                if (namingEnum.hasMore ()){
                    SearchResult result = (SearchResult) namingEnum.next ();    
                    Attributes attrs = result.getAttributes ();
                    photo=(String)attrs.get("thumbnailPicture").get() ;
                }

代码没有错,因为我可以检索电子邮件地址,例如当我更改photo=(String)attrs.get("thumbnailPicture").get() ;

photo=(String)attrs.get("mail").get() ;

我注意到当通过OpenDJ控制面板添加图片时,它通过浏览按钮进行,所以我猜测路径应该存储在某个地方?

我没有收到任何错误消息(我认为因为 thumbnailPicture 照片属性未填入OpenDJ,因此它们返回空)但我想要的是:

  • 保存图片的路径,但这只是一个猜测 OpenDJ实际存储了这些信息吗?
  • 检索图片的可能性,但我不确定它在OpenDJ中保存的内容。代码现在用于文件的路径(这就是为什么有一个转换为String的原因)。

3 个答案:

答案 0 :(得分:1)

我认为您可能需要提出jpegPhoto属性?

答案 1 :(得分:1)

目录不存储图像的路径。它存储图像。

你没有理由提到你得到的错误信息,或者你真正进入这段代码的距离,这使得一个明确的答案无法实现,但是照片属性作为字节数组返回,而不是字符串,所以:

photo=(String)attrs.get("thumbnailPicture").get() ;

如果结果没有这样的属性,attrs.get("thumbnailPicture")将返回null,因此以下.get()会抛出NullPointerException。如果它确实具有这样的属性及其值,那么在尝试将ClassCastException投射到byte[]时会得到String.唯一可能的结论是这行代码不是'正在执行,因此photo保持其先前值,大概是null,这会引起您正在观察的任何行为,尽管有许多请求,但您没有告诉我们。

答案 2 :(得分:0)

对于用户图像,存在多个属性:

  1. thumbnailphoto(特别是来自Active Directory)
  2. jpegPhoto
  3. 和照片
  4. 所以请使用以下代码:

    photo=(String)attrs.get("thumbnailPhoto").get() ;
    

    ,或者

    photo=(String)attrs.get("jpegPhoto").get() ;