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
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