Exporting media content using DataExporter
I want to export CMS media file and I found that using EPiServer.Enterprise.DataExporter make sense.
In project, create new page with code behind below:
public partial class ExportMedia : System.Web.UI.Page
{
private static Injected _tabDefinitionRepository;
private static Injected _propertyDefinitionRepository;
private static Injected _contentRepository ;
private static Injected _categoryRepository;
protected void Page_Load(object sender, EventArgs e)
{
DataExporter exporter = new DataExporter();
//Get all page references and data
List startPageReferenceList = new List();
List startPageDataList = new List();
ContentFolder rootFolder = _contentRepository.Service.GetChildren(EPiServer.Web.SiteDefinition.Current.GlobalAssetsRoot).FirstOrDefault() as ContentFolder;
exporter.Frames.AddRange(Frame.List());
exporter.TabDefinitions.AddRange(_tabDefinitionRepository.Service.List());
foreach (var propertyDefinition in _propertyDefinitionRepository.Service.ListDynamic())
{
exporter.DynamicPropertyDefinitions.Add(propertyDefinition);
}
exporter.Categories.AddRange(_categoryRepository.Service.GetRoot().Categories);
//Set rootFolder to exporter
ExportSource sourceRoot = new ExportSource(rootFolder.ContentLink, EPiServer.Core.Transfer.ExportSource.RecursiveLevelInfinity);
exporter.SourceRoots.Add(sourceRoot);
//property settings
exporter.ExportPropertySettings = true;
exporter.IncludeImplicitContentDependencies = true;
if (Request.QueryString["debug"] != null)
{
Response.Clear();
exporter.Stream = new MemoryStream();
exporter.Export();
if (exporter.Log.Errors.Count > 0)
{
foreach (string s in exporter.Log.Errors)
{
Response.Write(s + "; ");
}
}
else
{
Response.Write("OK");
}
}
else
{
Response.Clear();
string file = Path.GetTempFileName();
exporter.Stream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.Write | FileAccess.Read, FileShare.Read);
exporter.Export();
exporter.Close();
if (exporter.Log.Errors.Count > 0)
{
throw new Exception("errors occured,try &debug=true");
}
Response.ContentType = "binary/octet-stream";
Response.AddHeader("Content-disposition", "attachment; filename=MediaContent.episerverdata");
exporter.Stream.Close();
Response.WriteFile(file);
}
Response.End();
}
}
Navigate to this page in browser, we will get export file. And we can use this file to import media content.
Comments