用代码从AD读取照片信息并同步到SharePoint2010的个人照片信息中
-
前言
上篇我们讲到用代码实现了照片信息同步到SharePoint2010的个人照片信息中,但是做的是从文件夹读取照片信息到SharePoint2010,今天我们要做的从AD的thumbnailPhoto属性中读取照片信息到SharePoint2010的个人照片信息中。
-
实现方法
前提就是:AD的thumbnailPhoto属性已经存在照片(建议宽度和高度为96X96,AD默认图片大小)。
我在这里往contoso\\test7(提示:此用户存在Users的OU下,可以放在任何OU下都可以)这个账号上传一个漂亮MM的照片如下图:
上传前的照片如下:
上传到AD如下(注意:我这里以BASE64位编码保存的,所以代码需要用BASE64解码):
验证下运行同步代码前MOSS2010的test7个人站点看我的配置信息也没有照片如下图:
代码段:
特别注意:AD中的照片信息如以Base64编码保存的。那么读取来的时候需要解码,否则会提示:参数无效错误
附带:BASE64字符表格式如下:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
上传核心代码段(其他代码跟上篇一样http://www.cnblogs.com/love007/archive/2012/08/23/2652798.html):
/// <summary>
/// 从AD同步信息到MOSS2010
/// </summary>
private static void UploadADPhotos()
{
//得到网站集合
SPSite mySites = new SPSite(MySiteHostUrl);
//得到网站
SPWeb myWeb = mySites.OpenWeb();
SPFolder subfolderForPictures = myWeb.GetFolder("User Photos\\Profile Pictures");
if (subfolderForPictures == null)
{
return;
}
UserProfileManager userProfileManager = new UserProfileManager(SPServiceContext.GetContext(mySites));
//***********************************读取AD照片信息
DirectoryEntry de = new DirectoryEntry("LDAP://DC=contoso,DC=com", "contoso\\mossadmin", "Passw0rd!", AuthenticationTypes.Secure);
//读取AD的配置信息
DirectorySearcher search = new DirectorySearcher();
search.SearchRoot = de;
//contoso\\test7照片信息
search.Filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=test7))";
search.PropertiesToLoad.Add("samaccountname");
search.PropertiesToLoad.Add("thumbnailPhoto");
SearchResult user;
user = search.FindOne();
if (user == null)
{
return;
}
byte[] buffer = (byte[])user.Properties["thumbnailPhoto"][0];
//
//***********************************读取AD照片信息
//buffer
if (buffer != null)
{
//
string fileNameWithoutExtension = GetFileNameFromAccountName(MAccountName);
//把AD照片赋值给
int largeThumbnailSize = 0X90;
int mediumThumbnailSize = 0X60;
int smallThumbnailSize = 0X20;
//上传3张
//BASE64解码,我是以64编码保存的,所以需要解码,当然如果没有编码,不需要如下代码
//******************************************BASE64解码
string s = Encoding.Default.GetString(buffer);
buffer = Convert.FromBase64String(s);
//*******************************************BASE64解码
using (MemoryStream stream = new MemoryStream(buffer))
{
using (Bitmap bitmap = new Bitmap(stream, true))
{
CreateThumbnail(bitmap, largeThumbnailSize, largeThumbnailSize, subfolderForPictures, fileNameWithoutExtension + "_LThumb.jpg");
CreateThumbnail(bitmap, mediumThumbnailSize, mediumThumbnailSize, subfolderForPictures, fileNameWithoutExtension + "_MThumb.jpg");
CreateThumbnail(bitmap, smallThumbnailSize, smallThumbnailSize, subfolderForPictures, fileNameWithoutExtension + "_SThumb.jpg");
}
}
SetPictureUrl(MAccountName, subfolderForPictures, userProfileManager, mySites.Url);
}
myWeb.Dispose();
mySites.Dispose();
}
-
测试结果
去个人站点下的用户配置信息看照片如下图:终于看到漂亮的MM
去【图片库】-【用户照片】可以看到如下图信息: