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
Hope it helps
Discover more from Nishant Rana's Weblog
Subscribe to get the latest posts sent to your email.

Does this work with SharePoint Online?
LikeLike
I read a lot of interesting content here. Probably you spend a lot of time
writing, i know how to save you a lot of work, there is an online tool that creates readable,
google friendly posts in minutes, just search in google – laranitas free
content source
LikeLike