• 用代码实现Sharepoint2010的个人信息的照片上传(2)(原创)


    用代码从AD读取照片信息并同步到SharePoint2010的个人照片信息中

    • 前言

    上篇我们讲到用代码实现了照片信息同步到SharePoint2010的个人照片信息中,但是做的是从文件夹读取照片信息到SharePoint2010,今天我们要做的从AD的thumbnailPhoto属性中读取照片信息到SharePoint2010的个人照片信息中。

    • 实现方法

    前提就是:AD的thumbnailPhoto属性已经存在照片(建议宽度和高度为96X96,AD默认图片大小)。

    我在这里往contoso\\test7(提示:此用户存在Users的OU下,可以放在任何OU下都可以)这个账号上传一个漂亮MM的照片如下图:

    上传前的照片如下:

    clip_image001

    上传到AD如下(注意:我这里以BASE64位编码保存的,所以代码需要用BASE64解码):

    clip_image002

    验证下运行同步代码前MOSS2010的test7个人站点看我的配置信息也没有照片如下图:

    clip_image004

    代码段:

    特别注意: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

    clip_image006

    去【图片库】-【用户照片】可以看到如下图信息:

    image

  • 相关阅读:
    时尚前沿的图片左右滚动效果-1
    瀑布流效果
    js遮罩层弹出显示效果组件化
    javascript学习笔记(三)
    前端开发技巧
    Pushlet后台推送
    比较抽象的面试题
    技术点
    HTML5特性
    struts2学习笔记(二)
  • 原文地址:https://www.cnblogs.com/love007/p/2654307.html
Copyright © 2020-2023  润新知