我需要一个方法来获取* .jpg图像文件并将其上传到Windows AD 2003的Active Directory中的用户配置文件。
另一种方法是将照片作为流检索或将其作为安全的Web服务公开,以便在java等跨平台应用程序中调用(该死的!我要求的太多!!!)
正在上传的文件将是* .jpg,它基本上是用户创建的可视签名文件。
是否有任何在C#中使用Active Directory的经验可以提供一些信息,说明如何通过与安全性相关的最小含义来完成此操作。
从Windows Active Directory管理员的角度来看,他有什么需要 做到这一点。改变/规定用户档案的架构等。
正在上传图像,以便稍后可以从AD中检索图像以插入PDF文档以进行签名。
可以用C#完成吗?或者是否有任何库等?
答案 0 :(得分:15)
以下是一系列博客文章,其中包含显示如何操作的代码:
(第一部分展示了如何拍摄照片,第二部分展示了如何拍摄照片)
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正在设置的那个(但它可能只在我的组织中这样做)
答案 1 :(得分:13)
用户照片的常见AD属性为jpegPhoto,但您可以使用您想要的名称
此示例显示了获取和设置图像流的基本AD方式。你需要将这些方法充实为一个有用的类
考虑让您的网络服务只返回图片的网址。然后,该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;
}
}
答案 2 :(得分:-2)
每个Active Directory用户配置文件都有一个主文件夹。 如果您对此不确定,请查看以下文章 http://support.microsoft.com/kb/816313 我相信你必须将图像文件上传到这个目录。
如果这不能解决您的问题,请更新,如果您发现其他问题。
... MNK