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