代码之家  ›  专栏  ›  技术社区  ›  abmv

如何在c_中将图像文件上载到Active Directory用户配置文件?

  •  15
  • abmv  · 技术社区  · 15 年前

    我需要一种方法,它将获取一个*.jpg图像文件并将其上载到WindowsAD2003的Active Directory中的用户配置文件。

    还有一种方法来检索照片作为流或暴露它作为安全的Web服务,由Java平台的跨平台应用程序调用(该死)!我问得太多了吗?!!!)

    正在上载的文件将是一个*.jpg,它基本上是一个用户创建的可视签名文件。

    是否有任何在C中使用Active Directory的经验的人提供了一些关于如何在最低程度上实现与安全相关的影响的信息?

    从Windows Active Directory管理员的角度来看,他需要做什么? 要使这成为可能,请执行以下操作:更改/设置用户配置文件的架构等。

    正在上载图像,以便稍后从要插入PDF文档的广告中检索该图像以进行签名。

    这可以用C语言完成吗?或者有没有做过的图书馆等?

    4 回复  |  直到 7 年前
        1
  •  15
  •   No More Hacks    14 年前

    下面是一系列包含代码的博客文章,展示了如何做到这一点:

    (第一个演示如何获取照片,第二个演示如何获取照片)

    Using the jpegPhoto attribute in AD - Part I

    Using the jpegPhoto attribute in AD - Part II

    编辑: 下面是实现第一部分代码的通用函数:

    void AddPictureToUser(
        string strDN,       // User Distinguished Name, in the form "CN=Joe User,OU=Employees,DC=company,DC=local"
        string strDCName,   // Domain Controller, ie: "DC-01"
        string strFileName // Picture file to open and import into AD
        )
    {
        // Open file
        System.IO.FileStream inFile = new System.IO.FileStream(strFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
    
        // Retrive Data into a byte array variable
        byte[] binaryData = new byte[inFile.Length];
    
        int bytesRead = inFile.Read(binaryData, 0, (int)inFile.Length);
        inFile.Close();
    
        // Connect to AD
        System.DirectoryServices.DirectoryEntry myUser = new System.DirectoryServices.DirectoryEntry(@"LDAP://" + strDCName + @"/" + strDN);
    
        // Clear existing picture if exists
        myUser.Properties["jpegPhoto"].Clear();
    
        // Update attribute with binary data from file
        myUser.Properties["jpegPhoto"].Add(binaryData);
        myUser.CommitChanges();
    }
    

    编辑: 我发现在我的组织中,要设置的正确属性是“thumbnailphoto”,如下所示:

    myUser.Properties["thumbnailPhoto"].Add(binaryData);
    

    这似乎也是商业产品 Exclaimer 正在设置(但可能只在我的组织中执行此操作)

        2
  •  13
  •   TFD    15 年前

    用户照片的常见广告属性是 jpegPhoto 但是你可以用你想要的任何名字

    此示例显示获取和设置图像流的基本广告方式。为了成为一个有用的类,您需要充实这些方法

    考虑让Web服务只返回图像的URL。然后,该URL的请求处理程序应返回具有正确内容类型等的图像。在Web环境中更有用。

    using System;
    using System.DirectoryServices;
    using System.Collections;
    using System.IO;
    
    public class ADPhoto {
    
    public void Set() {
      try {
        var de = new DirectoryEntry("LDAP://cn=username,cn=users,DC=domain, DC=com");
        de.Username = "username";
        de.Password = "password";
        var forceAuth = de.NativeObject;
        var fs = new FileStream("path\\photo.jpg", FileMode.Open);
        var br = new BinaryReader(fs);    
        br.BaseStream.Seek(0, SeekOrigin.Begin);
        byte[] ba = new byte[br.BaseStream.Length];
        ba = br.ReadBytes((int)br.BaseStream.Length);
        de.Properties["jpegPhoto"].Insert(0, ba);
        de.CommitChanges();
      }
      catch(Exception ex) {
        Console.WriteLine(ex.Message);
      }
    }
    
    
    public Stream Get() {
      var fs = new MemoryStream();
      try {
        var de = new DirectoryEntry("LDAP://cn=username,cn=users,DC=domain, DC=com");
        de.Username = "username";
        de.Password = "password";
        var forceAuth = de.NativeObject;
        var wr = new BinaryWriter(fs);
        byte[] bb = (byte[])de.Properties["jpegPhoto"][0];
        wr.Write(bb);
        wr.Close();
      }
      catch (Exception e) {
        Console.WriteLine(e.Message);
      }
      return fs;
    }
    
    }
    
        3
  •  0
  •   Kim    10 年前

    找到一篇文章,介绍如何将图片上载到Active Directory,以及如何让图片在最终用户计算机上显示。

    http://blog.jocha.se/tech/ad-user-pictures-in-windows-10

        4
  •  -2
  •   user153410    15 年前

    每个Active Directory用户配置文件都将有一个主文件夹。 如果您对此不确定,请查看以下文章 http://support.microsoft.com/kb/816313 我相信你必须把图像文件上传到这个目录。

    此外,如果这不能解决您的问题,请更新,如果您找到其他东西。

    MNK…