This sample illustrates how to add a media block type to the CMS. This assumes you have a Article page type but really you just need to pass in a ContentLink to the location you want to save the file to.
Below are some sample methods to add a new blob and insert data into it.
//article is a page type (used to get the content link)
public string AddFile(Article article, HtmlFile file)
{
string url = "";
try
{
var contentAssetHelper = ServiceLocator.Current.GetInstance<ContentAssetHelper>();
// get an existing content asset folder or create a new one
var assetsFolder = contentAssetHelper.GetOrCreateAssetFolder(article.ContentLink);
var contentRepository = ServiceLocator.Current.GetInstance<IContentRepository>();
var blobFactory = ServiceLocator.Current.GetInstance<EPiServer.Framework.Blobs.BlobFactory>();
string name = "";
string ext = "";
var file = new MediaData();
if (file.Image)
{
//add an image
file = contentRepository.GetDefault<Project.Models.Media.ImageFile>(assetsFolder.ContentLink);
name = file.Name;
ext = file.Ext;
}
else
{
//add a file
file = contentRepository.GetDefault<Project.Models.Media.GenericMedia>(assetsFolder.ContentLink);
name = file.Name;
ext = file.Ext;
}
file.Name = name;
//create blob storage
var blob = blobFactory.CreateBlob(file.BinaryDataContainer, "." + ext.TrimStart('.'));
//get the data for the url provided
var data = GetByteData(file.Url);
//write data to blob
blob.Write(new System.IO.MemoryStream(data));
file.BinaryData = blob;
//save the file
//take note of the no access level. You may not want to use this in a production situation.
var fileRef = contentRepository.Save(file, EPiServer.DataAccess.SaveAction.Publish, AccessLevel.NoAccess);
//get the url of the file
return EPiServer.Web.Routing.UrlResolver.Current.GetUrl(fileRef);
}
catch (Exception ex)
{
}
return url;
}
/// <summary>
/// Get the file data
/// </summary>
/// <param name="url">URL to retrieve the data from</param>
/// <returns>returns the file byte array</returns>
private byte[] GetByteData(string url)
{
try
{
using (var client = new System.Net.WebClient())
{
byte[] data = client.DownloadData(new Uri(url));
return data;
}
}
catch (Exception ex)
{
return null;
}
}
Please sign in to leave a comment.