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");

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();

}

}

}

}


时间: 2024-11-05 15:49:08

SharePoint2013的头像显示和读取的相关文章

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

转自:http://www.cnblogs.com/Jaylong/archive/2012/09/27/androidUI.html 用过微信的朋友朋友都见过微信中点击对方头像显示会加载大图,先贴两张图片说明下: 这种UI效果对用户的体验不错,今天突然有了灵感,试着去实现,结果就出来了.. 下面说说我的思路: 1.点击图片时跳转到另一个activity,然后显示加载的效果,即progressbar 2.显示图片的之前先弹出自定义dialog,然后模拟加载一段时间后,显示整张大图片,要全屏显示,

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

在android 4.4.3上面,联系人的头像默认显示首字母,但是不支持中文字符,如下图: 如果联系人名字的第一位是英文字符(a-z || A-Z),则默认头像将显示该首字母. 如果支持中文时显示第一个汉字,那就happy了. 那就看看如何通过修改源代码来实现这一小功能吧- 我们还是先了解下联系人头像加载的流程吧- 联系人头像加载这个问题还是很有意思的,在Contacts中使用ContactPhotoManager类(严格来讲是这个类的子类)来实现头像的异步加载. 这个类还使用了LruCache

自定义AvatarImageView满足你所有头像显示需求

请尊重个人劳动成果,转载注明出处,谢谢! http://blog.csdn.net/amazing7/article/details/51810091 我们项目中头像显示一般都是圆形的,但是有时候不排除各种样式(不一定是个规则的形状),比如 上次UI给了我一个 圆形下面少了一块.我们一般实现自定义形状的图形有三种方式:PorterDuffXfermode .BitmapShader.ClipPath.下面我都会分别说明,我这里实现使用的第一种方式(实现还是比较简单的). 1.PorterDuff

第九章 显示、读取或拼接文件内容:cat命令

第九章 显示.读取或拼接文件内容:cat命令 名字解释 cat命令 连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于linux下的type命令. 注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容,因此一般用more等命令分屏显示.为了控制滚屏,可以按ctrl+S键,停止滚屏:按ctrl+Q键可以恢复滚屏.按ctrl+C键可以中断该命令的执行,并且返回shell提示符状态. 语法 cat (选项) (参数) 选项 -n或--number:显示所有输出

JS实现鼠标经过用户头像显示资料卡的效果,可点击

基于项目的须要.须要制作出例如以下的一种页面效果:当用户鼠标经过好友列表中好友头像时,显示该好友的基本资料.事实上也就是类似QQclient的那种功能. 网上找了非常多代码,基本都实现了鼠标悬浮之后弹出div,离开之后立即就消失了.还有些纯CSS的代码实现了这种效果,可是对我没用,我须要的是JS的(由于我的数据还要通过Ajax取得),而且鼠标离开后不能立即隐藏.这个div上还有功能入口.这个页面效果折腾了我一天.由此可见我的JS和CSS技术有待提高... 搜索了好久,最终发现了可行的2个思路例如

【Android】读取sdcard卡上的全部图片而且显示,读取的过程有进度条显示

尽管以下的app还没有做到快图浏览.ES文件浏览器的水平,遇到大sdcard还是会存在读取过久.内存溢出等问题,可是基本思想是这种. 例如以下图.在sdcard卡上有4张图片, 打开app,则会吧sd卡上的全部图片读取,并显示出来.读取的过程有进度条显示. 制作步骤例如以下: 1.首先,res\values\strings.xml对字符设置例如以下,没有什么特别的. <? xml version="1.0" encoding="utf-8"?> <

【Android】读取sdcard卡上的所有图片并且显示,读取的过程有进度条显示

虽然下面的app还没有做到快图浏览.ES文件浏览器的水平,遇到大sdcard还是会存在读取过久.内存溢出等问题,但是基本思想是这样的. 如下图,在sdcard卡上有4张图片, 打开app,则会吧sd卡上的所有图片读取,并显示出来,读取的过程有进度条显示. 制作过程如下: 1.首先,res\values\strings.xml对字符设置如下,没有什么特别的. <?xml version="1.0" encoding="utf-8"?> <resour

Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码

Android项目开发中经常会遇见需要实现圆角或者圆形的图片功能,如果仅仅使用系统自带的ImageView控件显然无法实现此功能,所以通过系列文章的形式由简到繁全方位的介绍一下此功能的实现,巩固一下自身的学习,同时,和广大网友交流分享 本项目源码下载地址:链接:http://pan.baidu.com/s/1sljdvtF 密码:xj85 首先看效果图 首先看一下CircleImageView的主要流程 1. 首先通过setImageXxx()方法设置图片Bitmap: 2. 进入构造函数Cir

点击头像显示大图Dialog

1.实现效果 点击头像 弹出全屏dialog,长按图片弹出“保存图片对话框”,短按dialog消失. package com.example.widget; import android.app.Dialog; import android.content.Context; import android.graphics.Bitmap; import android.os.Bundle; import android.view.View; import android.view.View.OnL