web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :

Upload User Profile Picture programmatically in SharePoint 2013

Nishant Rana Profile Picture Nishant Rana 11,325 Microsoft Employee

Hi,

We recently had a requirement to create a web part that would be used to update user profile picture and few other properties.

For this we used the FIileUpload control.

The code used


public void UploadPhoto(string accountName, byte[] image)
 {

string loginNameForProfile = accountName.Substring(accountName.IndexOf(@"|") + 1);

if (profileUpload.HasFile)
 {
 SPSecurity.RunWithElevatedPrivileges(delegate()
 {
 using (SPSite site = new SPSite(SPContext.Current.Site.Url))
 {
 SPServiceContext serviceContext = SPServiceContext.GetContext(site);
 UserProfileManager userProfileMgr = new UserProfileManager(serviceContext);
 ProfilePropertyManager profilePropMgr =
 new UserProfileConfigManager(serviceContext).ProfilePropertyManager;

// Retrieve all properties for the "UserProfile" profile subtype,
 // and retrieve the property values for a specific user.
 ProfileSubtypePropertyManager subtypePropMgr =
 profilePropMgr.GetProfileSubtypeProperties("UserProfile");
 UserProfile userProfile = userProfileMgr.GetUserProfile(loginNameForProfile);

 SPSite mySite = new SPSite(userProfileMgr.MySiteHostUrl);
 SPWeb web = mySite.RootWeb;
 SPFolder subfolderForPictures = web.Folders["User Photos"].SubFolders["Profile Pictures"];

web.AllowUnsafeUpdates = true;

Stream fs = profileUpload.PostedFile.InputStream;

byte[] buffer = new byte[profileUpload.PostedFile.ContentLength];
 fs.Read(buffer, 0, Convert.ToInt32(profileUpload.PostedFile.ContentLength));
 fs.Close();
 int largeThumbnailSize = 300;
 int mediumThumbnailSize = 72;
 int smallThumbnailSize = 48;

 

string accName = accountName.Substring(accountName.IndexOf(@"\") + 1);
 using (MemoryStream stream = new MemoryStream(buffer))
 {
 using (Bitmap bitmap = new Bitmap(stream, true))
 {

 CreateThumbnail(bitmap, largeThumbnailSize, largeThumbnailSize, subfolderForPictures,
 accName + "_LThumb.jpg");
 CreateThumbnail(bitmap, mediumThumbnailSize, mediumThumbnailSize, subfolderForPictures,
 accName + "_MThumb.jpg");
 CreateThumbnail(bitmap, smallThumbnailSize, smallThumbnailSize, subfolderForPictures,
 accName + "_SThumb.jpg");
 }
 }
 string pictureUrl = String.Format("{0}/{1}/{2}_MThumb.jpg", subfolderForPictures.ParentWeb.Site.Url, subfolderForPictures.Url, accName);
 // Change the value of a single-value user property.
 userProfile[PropertyConstants.PictureUrl].Value = pictureUrl;
 imgUserProfile.ImageUrl = pictureUrl;
 // Save the changes to the server.
 userProfile.Commit();

web.AllowUnsafeUpdates = false;
 }
 });

}
 }

public SPFile CreateThumbnail(Bitmap original, int idealWidth, int idealHeight, SPFolder folder, string fileName)
 {
 SPFile file = null;

Assembly userProfilesAssembly = typeof(UserProfile).Assembly;

Type userProfilePhotosType = userProfilesAssembly.GetType("Microsoft.Office.Server.UserProfiles.UserProfilePhotos");
 MethodInfo[] mi_methods = userProfilePhotosType.GetMethods(BindingFlags.NonPublic | BindingFlags.Static);

MethodInfo mi_CreateThumbnail = mi_methods[0];
 if (mi_CreateThumbnail != null)
 {
 file = (SPFile)mi_CreateThumbnail.Invoke(null, new object[] { original, idealWidth, idealHeight, folder, fileName, null });
 }

return file;
 } // end of function

The helpful post

http://lixuan0125.wordpress.com/2013/04/08/upload-user-profile-pictures-programmatically-sharepoint-2013/

Hope it helps


Filed under: SharePoint, SharePoint 2010, SharePoint 2013 Tagged: SharePoint, SharePoint 2010, SharePoint 2013

This was originally posted here.

Comments

*This post is locked for comments