• C#图片上传获取二进制流保存至AD



    <form id="form1" runat="server"> <div> <asp:FileUpload ID="FileUploadPhoto" runat="server" /> <asp:Button ID="UploadPhoto" runat="server" Text="上传" OnClick="UploadPhoto_Click" /> </div> </form>
     protected void UploadPhoto_Click(object sender, EventArgs e)
            {
                string name = FileUploadPhoto.PostedFile.FileName;
                string type = name.Substring(name.LastIndexOf(".")+1);
                //FileStream fs = File.OpenRead(name);
                byte[] content = new byte[FileUploadPhoto.PostedFile.ContentLength];
                //fs.Read(content,0,content.Length);
                //fs.Close();
    
                Stream fileStream = FileUploadPhoto.PostedFile.InputStream;
                fileStream.Read(content, 0, FileUploadPhoto.PostedFile.ContentLength);
                fileStream.Close();
                ChangeADAccount("刘科","liuke",content);
            }
    
            /// <summary>
            /// 获得DirectoryEntry对象实例,以管理员登陆AD
            /// </summary>
            /// <returns></returns>
            private static DirectoryEntry GetDirectoryObject()
            {
                DirectoryEntry entry = null;
                try
                {
                    entry = new DirectoryEntry("LDAP://10.10.10.1/DC=aaa,DC=com", "账户", "密码", AuthenticationTypes.Secure);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.Message);
                }
                return entry;
            }
    
            /// <summary>
            /// 根据用户公共名称取得用户的 对象
            /// </summary>
            /// <param name="commonName">用户公共名称</param>
            /// <returns>如果找到该用户则返回用户的对象,否则返回 null</returns>
            public static DirectoryEntry GetDirectoryEntry(string commonName)
            {
                DirectoryEntry de = GetDirectoryObject();
                DirectorySearcher deSearch = new DirectorySearcher(de);
                deSearch.Filter = "(&(&(objectCategory=person)(objectClass=user))(cn=" + commonName.Replace("\", "") + "))";
                deSearch.SearchScope = SearchScope.Subtree;
                try
                {
                    SearchResult result = deSearch.FindOne();
                    de = new DirectoryEntry(result.Path);
                    return de;
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.Message);
                    return null;
                }
            }
    
            /// <summary>
            /// 设置指定的属性值
            /// </summary>
            /// <param name="de"></param>
            /// <param name="propertyName">属性名称?</param>
            /// <param name="propertyValue">属性值</param>
            public static void SetProperty(DirectoryEntry de, string propertyName, string propertyValue)
            {
                if (de.Properties.Contains(propertyName))
                {
                    if (String.IsNullOrEmpty(propertyValue))
                    {
                        de.Properties[propertyName].RemoveAt(0);
                    }
                    else
                    {
                        de.Properties[propertyName][0] = propertyValue;
                    }
                }
                else
                {
                    if (!String.IsNullOrEmpty(propertyValue))
                    {
                        de.Properties[propertyName].Add(propertyValue);
                    }
                }
            }
    
            /// <summary>
            /// 修改查询到的用户的图像
            /// </summary>
    
            public static string ChangeADAccount(string CommonName, string Account, byte[] binaryData)
            {
                //获取对应AD实体
                DirectoryEntry user = GetDirectoryEntry(CommonName);
                try
                {
                    //SetProperty(user, " sAMAccountName ", Account);
                    //user.Invoke("SetPhoto", new object[] { photo });
                    user.Properties["thumbnailPhoto"].Add(binaryData);
                    user.CommitChanges();
                }
                catch (Exception e)
                {
                    Debug.WriteLine(e.Message);
                    throw e;
                }
                return user.Path;
            }

    然后在AD的 属性编辑器 选项卡看到 thumbnailPhoto 属性 有一堆二进制内容,即为上传成功的图片内容。

    如果看不到此属性,点击筛选器,去掉 只显示有值的属性的勾。

    解决文件名中文乱码

    http://blog.csdn.net/lzy_1515/article/details/5538664

    AD中thumbnailphoto在Lync中显示,图片最大值为100 K

    修改 AD架构为了使头像能够显示在GAL中,需要让其在全局编录(GC)中进行复制 ,

    默认情况下,对象 的“thumbnailphoto”属性 值不会在GC中进行复制 ,通过修改 AD架构可以是实现 这一个功能。

    在以管理 员身份打开cmd,并执行 Regsvr32schmmgmt.dll注册AD架构管理 单元、

    打开MMC控制 台,添加AD架构管理 单元

    在活动 目录 架构管理 单元中展开“属性 ”节点,定位到“thumbnailPhoto”。

    打开“thumbnailPhoto”的属性 对话框,在“常规”选项 卡上勾选“将此属性 复制 到全局编录”。

    clip_image002

    接下来,需要用到一个导入图片到AD数据库的工具:

    ADPhotoImport.exe username c:photousername.jpg

    图片大小最好为96*96像素 10K以下

    (需要此工具的可留下email地址,我会发出至邮箱)

    或者使用网上的一个收费工具,未注册时,会在图片上打上水印

    搜索ADPhotosTrial.msi

    http://tech.ddvip.com/2012-12/1356887106188020.html

  • 相关阅读:
    Linux基础命令---nfsstat显示nfs信息
    Linux基础命令----smbclient
    Myeclipse10下载,安装,破解,插件,优化介绍
    MyEclipse常用插件使用教程
    MyEclipse10 中的两种FreeMarker插件的安装与配置
    导入项目名称重复
    append,appendTo和prepend #1daae2
    Java Session超时设置
    jquery刷新页面
    windows不能显示此连接属性。windows management instrumentation (WMI) 信息可能损坏
  • 原文地址:https://www.cnblogs.com/kennyliu/p/3664145.html
Copyright © 2020-2023  润新知