前言

有个时候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");
else
userName = (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 期间,用户可以使用 OldBaseUriNewBaseUri 参数。您只需指定已从旧 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的头像显示和读取相关推荐

  1. VC 下 64bit 整数的显示和读取格式化字串

    2019独角兽企业重金招聘Python工程师标准>>> VC 下 64bit 整数的显示和读取格式化字串是: %I64d 转载于:https://my.oschina.net/moq ...

  2. android高仿微信UI点击头像显示大图片效果

    用过微信的朋友朋友都见过微信中点击对方头像显示会加载大图,先贴两张图片说明下: 这种UI效果对用户的体验不错,今天突然有了灵感,试着去实现,结果就出来了.. 下面说说我的思路: 1.点击图片时跳转到另 ...

  3. 解决GitHub中头像显示异常、设置不了头像、README图片无法显示等问题

    解决GitHub中头像显示异常.设置不了头像.README图片无法显示等问题   很多时候在访问 GitHub 官网时容易出现 GitHub 头像显示异常的问题.虽然这个问题无关痛痒,不过对于有强迫症 ...

  4. 微擎不升级解决头像显示问题。

    微擎不升级解决头像显示问题. 参考文章: (1)微擎不升级解决头像显示问题. (2)https://www.cnblogs.com/102442/p/8598290.html 备忘一下.

  5. python下:用 matplotlib.pyplot 显示 Opencv 读取的图像

    在涉及图像处理时,我们通常用opencv去读取并处理图像,而用matplotlib去显示图像,因为opencv有很强的图像处理能力,而matplotlib有很强的可视化能力,可以方便的可视化分析实验的 ...

  6. 计算机读不到u盘如何修复u盘,u盘读不出来怎么办?各种U盘无法显示无法读取修复方案...

    U盘是我们常用的随身数据储存设备,很多用户都会把常用的资料存在U盘中,不过有时会遇到U盘读不出来的问题,那么如何解决呢?首先U盘肯定是好的,至少在别的电脑能读出U盘,总的来说有硬件和软件方面的原因,下 ...

  7. 如何让联系人头像显示联系人姓名的第一个汉字

    http://www.cnblogs.com/Lefter/p/3804255.html 如何让联系人头像显示联系人姓名的第一个汉字 在android 4.4.3上面,联系人的头像默认显示首字母,但是 ...

  8. 处理opencv里用plt显示imread读取图像偏色问题

    处理opencv里用plt显示imread读取图像偏色问题 摘要 代码 看看结果: 原因: 解决方法: 看看结果 摘要 使用opecv过程中经常需要使用plt输出图片作为前后对比,方便观察. 但是会出 ...

  9. 解决Github网页上头像显示失败的问题

    最近不知道为什么突然GitHub上的头像显示不出了. 打开控制台,错误是Failed to load resource: net::ERR_CERT_COMMON_NAME_INVALID 实际上,可 ...

最新文章

  1. Rocksdb 写流程,读流程,WAL文件,MANIFEST文件,ColumnFamily,Memtable,SST文件原理详解
  2. java+hadoop配置参数_将Hadoop参数传递给Java代码
  3. Nature撤稿!三年前微软在量子计算上的巨大胜利终究是个错误
  4. Flink升级到1.4版本遇到的坑
  5. 国外persona用户画像_使用Mozilla Persona验证用户的指南
  6. 教你构建MySQL主从结构,实现基于SSL加密的主从同步机制。
  7. 斗鱼赴美递交IPO招股书:拟登陆纽交所 融资5亿美金
  8. delete删除重复记录方法
  9. 基于SSM的物业管理系统-JSP MYSQL小区物业费管理系统
  10. Linux高可用集群方案之heartbeat基础原理及逻辑架构
  11. CSS 框架 Bulma 教程
  12. 【用python写一个简易的消息轰炸代码】
  13. h2o java,R H2O与32位java
  14. 结巴分词 java_Java版结巴分词自定义词库
  15. 总账科目往来批量导入程序
  16. iOS 应用Archiving问题
  17. iOS- 网络访问JSON数据类型与XML数据类型的实现思路及它们之间的区别
  18. MMORPG游戏的文案设计
  19. WASC Threat Classification 安全威胁分类
  20. 《计算机网络》网络层之划分子网

热门文章

  1. 使用tcl文件分配管脚
  2. 现在物价虽然高得离谱,但是内存条都白菜价格了,需要调整程序架构的思维“与时俱进” --- 改进系列之一...
  3. 数据结构笔记(二十二)--已知先序中序求树
  4. java多线程的同步控制_Java多线程并发控制工具信号量Semaphore,实现原理及案例...
  5. java junit 运行_运行Junit方法项目启动不了
  6. mysql查询结果输出文件_如何将MySQL查询输出保存到文件?
  7. 初始化 数组 java_如何用Java初始化数组
  8. java追加到文件末尾_Java追加到文件
  9. Java Stream flatMap()
  10. component_春天@Component