Sitecore 8 : Programatically Upload and Associate Image to Contact Card

Greetings Reader,

I would like to quickly write a post about programmatically uploading a Image to the media library and then associating it to the contact card

Create an upload control which allows you to upload images

[code language=”csharp”]
<asp:FileUpload ID="Img" runat="server" AssociatedControlID="Img" />
[/code]

Programatically upload Media Item to Sitecore

[code language=”csharp”]
public MediaItem AddImageToMediaLibrary()
{
if (!Img.HasFile) return null;

var options = new Sitecore.Resources.Media.MediaCreatorOptions
{
AlternateText = txtName.Text,
FileBased = false,
IncludeExtensionInItemName = false,
KeepExisting = false,
Versioned = false,
Destination = "/sitecore/media library/Images/Contacts/" + txtName.Text,
Database = Sitecore.Configuration.Factory.GetDatabase("master")
};

var filename = Server.MapPath(Img.FileName);
var creator = new MediaCreator();
var mediaItem = creator.CreateFromStream(Img.PostedFile.InputStream, filename, options);
PublishItem(mediaItem);
return mediaItem;
}
[/code]

Associate the Media Item to Contact Card

[code language=”csharp”]
if (Tracker.Current.Contact != null)
{
using (new SecurityDisabler())
{
var image = AddImageToMediaLibrary();
MediaItem getmediaItem = Sitecore.Context.Database.GetItem(image.ID);
var stream = getmediaItem.GetMediaStream();
var memoryStream = new MemoryStream();
if (stream != null) stream.CopyTo(memoryStream);
var pictureFacet = Tracker.Current.Contact.GetFacet<IContactPicture>("Picture");
pictureFacet.Picture = memoryStream.ToArray();
pictureFacet.MimeType = getmediaItem.MimeType;
}
}
[/code]

Should you have any questions, Please comment below or tweet me.