0

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

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 控制面板添加图片时,它会通过浏览按钮,所以我猜路径应该存储在某个地方?

我没有收到任何错误消息(我想是因为属性thumbnailPicturephoto没有在 OpenDJ 中填写,所以它们返回为空)但我想要的是:

  • 保存图片的路径,但这只是 OpenDJ 实际存储此信息的猜测?
  • 检索图片的可能性,但我不确定它在 OpenDJ 中保存的内容。现在的代码用于文件的路径(这就是为什么要转换为字符串)。
4

4 回答 4

1

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

您不必费心提及您收到的错误消息,或者您真正进入此代码的程度,这使得确定的答案不可能,但照片属性作为字节数组返回,而不是字符串,所以:

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

如果结果没有这样的属性,attrs.get("thumbnailPicture")将返回 null,所以下面.get()会抛出一个NullPointerException. 如果它确实有这样的属性和它的值,你会ClassCastException从试图转换byte[]为然后导致您观察到的任何行为,尽管有很多请求,但您没有告诉我们。String.photonull

于 2015-07-31T22:51:48.450 回答
1

我想你可能需要询问jpegPhoto属性?

于 2015-07-31T22:21:30.677 回答
0

我使用下面的代码将 thumbnailPhoto 写入文件

    NamingEnumeration<SearchResult> results = ctx.search(base, filter, sc);
    // while (results.hasMore()) {
    SearchResult sr = (SearchResult) results.next();
    Attributes attrs = sr.getAttributes();
    Attribute attr = attrs.get("thumbnailPhoto"); 
  
    byte[] image =(byte[]) attr.get();       

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
   ObjectOutputStream out = new ObjectOutputStream(bos) ;
   out.writeObject(result);

    Path path = Paths.get("output.jpg");
    try {
        Files.write(path,  image);    // Java 7+ only
        System.out.println("Successfully written data to the file");
    }
    catch (IOException e) {
        e.printStackTrace();
    }
于 2021-09-23T16:10:52.930 回答
0

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

  1. thumbnailphoto(特别是来自 Active Directory)
  2. jpeg照片
  3. 和照片

所以使用以下代码:

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

或者,

photo=(String)attrs.get("jpegPhoto").get() ;
于 2016-08-09T06:00:43.390 回答