SharePoint2013的头像显示和读取
前言
有个时候SP的二次开发,需要用代码获取头像显示,如SP基于AD验证,AD有头像属性,做为头像数据来源(因为Exchange和lync的头像也来自AD),说道这里大家都知道有2种办法,一种从AD属性读取。一个从SP的user profile中去读取(也从AD来)。
方法1:从AD读取
AD有个属性叫thumbnailPhoto,而此属性存取的是二进制文件,因此读取的时候需要转换文件显示。首先需要在AD上传头像,可以用powershell或vbscript等很多方式上传照片(上传省略)。下面将采用C#代码如何获取AD的头像,做过验证码的人都知道,可以用Response.BinaryWrite 打印出来,然后图片控件访问这个打印出来的页面
1. 打印页面代码如下:
建议一个空白页面,后台代码如下:
using System;using System.Collections.Generic;using System.DirectoryServices;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace WebApplication1{public partial class photo : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){String myUser = Request.QueryString["u"];if (myUser == null)Response.Redirect("app_graphics/user.jpg");Response.ContentType = "image/jpeg";Response.Clear();Response.BufferOutput = true;DirectoryEntry de = new DirectoryEntry("LDAP://127.0.0.1/DC=contoso,DC=com", "mossadmin", "Passw0rd!");DirectorySearcher search = new DirectorySearcher();search.SearchRoot = de;search.Filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=" + myUser + "))";search.PropertiesToLoad.Add("samaccountname");search.PropertiesToLoad.Add("thumbnailPhoto");SearchResult user;user = search.FindOne();String userName;if (user == null)Response.Redirect("app_graphics/user.jpg");elseuserName = (String)user.Properties["sAMAccountName"][0];try{byte[] bb = (byte[])user.Properties["thumbnailPhoto"][0];Response.BinaryWrite(bb);Response.Flush();}catch{Response.Redirect("app_graphics/user.jpg");}}}}
2. 访问页面代码如下:
建议一个显示页面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title></head><body><form id="form1" runat="server"><div><img src="photo.aspx?u=mossadmin" id="myPhoto" onclick="getPhoto()"style="float: left; cursor: pointer;" /><script type="text/javascript">function getPhoto() {document.getElementById("myPhoto").src = "photo.aspx?u=mossadmin";}</script></div></form></body></html>
注意:还可以点击刷新页面,用onclick事件,如果不需要可以干掉。最终查看显示结果即可
方法二:从user profile读取头像
1. 首先需要启动user profile的2个服务,如下图:


SA需要创建,如下图:

2. 然后配置同步连接,如下图:

3. 配置同步属性,如下图:
大家知道PictureUrl为SP2013的头像字段,如下图:


点编辑配置如下:如果没有,选择导入添加属性,对照AD属性thumbnailPhoto

确定即可
4. 启动同步服务。如下图:

5. 查看同步后的结果

6. 此时用代码读取,不一定读取到,因为还没有存储到个人信息的“用户照片”库里头,
新的照片会放在“我的网站宿主”的“用户照片”库中,并更新配置文件数据库中的属性值
具体原理大家可以我博客:
http://www.cnblogs.com/love007/archive/2012/08/23/2652798.html
7、运行powershell脚本
Update-SPProfilePhotoStore -CreateThumbnailsForImportedPhotos 1
-MySiteHostLocation %MySiteURL%

在SharePoint Server 2013,运行 Update-SPProfilePhotoStore cmdlet 以确保 SharePoint 配置文件照片存储与 SharePoint Server 2013兼容。只能在从 Office SharePoint Server 2007 的升级完成后使用 Update-SPProfilePhotoStore cmdlet。使用 Update-SPProfilePhotoStore cmdlet 时,会从原始照片创建三个具有可预测大小和名称的缩略图版本,新的照片会放在“我的网站宿主”的“用户照片”库中,并更新配置文件数据库中的属性值。
在操作期间,原始图像会保持原样。如果特定用户因任何原因而导致操作失败,则会直接移到下一用户。将配置文件图片从一台服务器 URL 迁移到另一台服务器 URL 期间,用户可以使用 OldBaseUri 和 NewBaseUri 参数。您只需指定已从旧 URL 更改为新 URL 的 URL 的起始部分,系统就会尝试为配置文件图片 URL 重新设定基址。
例如,OldBaseUri: http://server1/my/ProfilePhotos; NewBaseUri: http://server1/my/NewLocation/ProfilePhotos
然后编写代码读取PictureUrl如下图:
#region//读取userprofile///<summary>///根据用户名获取UserProfile///</summary>///<param name="loginName">登录名</param>///<param name="site">当前站点</param>///<param name="web">当前web</param>///<returns></returns>public static UserProfile GetUserProfileByLoginName(string loginName, SPSite site, SPWeb web){UserProfile userProfile = null;SPSecurity.RunWithElevatedPrivileges(delegate(){SPUser user = web.EnsureUser(loginName); //当用户不存在时,自动将改用户添加到sharepoint中SPServiceContext serviceContext = SPServiceContext.GetContext(site);UserProfileManager profileManager = new UserProfileManager(serviceContext);if (profileManager.UserExists(loginName)){userProfile = profileManager.GetUserProfile(loginName); //读取用户配置文件}});return userProfile;}#endregion读取代码如下:static void Main(string[] args){using(SPSite site = new SPSite("http://sp2013:8001")){using(SPWeb web = site.OpenWeb("")){UserProfile upf = userBLL.GetUserProfileByLoginName("contoso\\mossadmin", site, web);//if (upf != null){//byte[] buffer = (byte[])upf[PropertyConstants.PictureUrl][0];string temp = upf[PropertyConstants.PictureUrl].Value.ToString();}}}}

SharePoint2013的头像显示和读取的更多相关文章
- android高仿微信UI点击头像显示大图片效果
用过微信的朋友朋友都见过微信中点击对方头像显示会加载大图,先贴两张图片说明下: 这种UI效果对用户的体验不错,今天突然有了灵感,试着去实现,结果就出来了.. 下面说说我的思路: 1.点击图片时跳转到另 ...
- 使用QT显示OpenCV读取的图片
目录 1. 概述 2. 实现 2.1. 代码 2.2. 解析 3. 结果 1. 概述 OpenCV自带了一部分常用的GUI功能,但是更多的图像处理功能需要其他GUI框架来辅助实现,这里通过QT来显示O ...
- 【Android】读取sdcard卡上的全部图片而且显示,读取的过程有进度条显示
尽管以下的app还没有做到快图浏览.ES文件浏览器的水平,遇到大sdcard还是会存在读取过久.内存溢出等问题,可是基本思想是这种. 例如以下图.在sdcard卡上有4张图片, 打开app,则会吧sd ...
- JS实现鼠标经过用户头像显示资料卡的效果,可点击
基于项目的须要.须要制作出例如以下的一种页面效果:当用户鼠标经过好友列表中好友头像时,显示该好友的基本资料.事实上也就是类似QQclient的那种功能. 网上找了非常多代码,基本都实现了鼠标悬浮之后弹 ...
- JS 头像显示
HTML <div class="form-group"> <label class="col-sm-3 control-label"> ...
- Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码
Android项目开发中经常会遇见需要实现圆角或者圆形的图片功能,如果仅仅使用系统自带的ImageView控件显然无法实现此功能,所以通过系列文章的形式由简到繁全方位的介绍一下此功能的实现,巩固一下自 ...
- 通过CSS3实现圆形头像显示
很久没更新博客了,因为比较菜,也没什么能在上面分享的.作为新手,马上要毕业找工作了,最近又在重新学习web的一些知识,刚刚学到CSS3,跟大家分享一些比较有趣的知识.今天分享的是利用CSS实现圆形头像 ...
- TreeView 节点的显示,读取,操作
using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq ...
- form表单普通提交预览显示,读取显示tmp文件
<html> <head> <meta http-equiv="content-type" content="text/html; char ...
随机推荐
- TFS简介
Team Foundation Server(TFS)是一种为 Microsoft 产品提供 源代码管理.数据收集.报告和项目跟踪,而为协作软件开发的项目.可作为独立的软件,或 Visual Stud ...
- 机器学习&数据挖掘笔记_21(PGM练习五:图模型的近似推理)
前言: 这次练习完成的是图模型的近似推理,参考的内容是coursera课程:Probabilistic Graphical Models . 上次实验PGM练习四:图模型的精确推理 中介绍的是图模型的 ...
- Maven使用详解
Maven使用详解 世间万物相生相克,今年本来的目标是主要研究asp.net mvc以及windows平台相关的DI, ORM框架,突然有一天想研究一个Java EE里面相应的框架都是怎么玩的,于是研 ...
- Java线程面试题 Top 50 (转载)
转载自:http://www.cnblogs.com/dolphin0520/p/3958019.html 原文链接:http://www.importnew.com/12773.html 本文由 ...
- ECharts+BaiduMap+HT for Web网络拓扑图应用
前一篇谈及到了ECharts整合HT for Web的网络拓扑图应用,后来在ECharts的Demo中看到了有关空气质量的相关报表应用,就想将百度地图.ECharts和HT for Web三者结合起来 ...
- position属性absolute与relative 详解
最近一直在研究javascript脚本,熟悉DOM中CSS样式的各种定位属性,以前对这个属性不太了解,从网上找到两篇文章感觉讲得很透彻,收藏下来,唯恐忘记.一.解读absolute与relative ...
- Wo的书单
一个人,一生之中总要有几本证明自己的书. 2016---08 <ASP.NET MVC5 高级编程(第五版)> <数据结构(C语言第二版)>
- 未能加载文件或程序集“System.Web.Http.WebHost, Version=4.0.0.0, ”或它的某一个依赖项。系统找不到指定的文件。
一:错误提示 "未能加载文件或程序集"System.Web.Http.WebHost, Version=4.0.0.0, Culture=neutral, PublicKeyTok ...
- web前端学习笔记---scrollWidth,clientWidth,offsetWidth的区别
通过一个demo测试这三个属性的差别. 说明: scrollWidth:对象的实际内容的宽度,不包边线宽度,会随对象中内容超过可视区后而变大. clientWidth:对象内容的可视区的宽度,不包滚动 ...
- 基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面
最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采用EasyUI的前端界面处理技术,走MVC的技术路线,在重 ...