London Dev Meetup Rescheduled! Due to unavoidable reasons, the event has been moved to 21st May. Speakers remain the same—any changes will be communicated. Seats are limited—register here to secure your spot!

Export assets without pages

Vote:
 

Hello!

Is there any way to export all assets in a media folder?

The current migration tool only lets me export assets references by pages, or stand-alone assets if I select them one by one, which takes forever since there are like 500 assets.

Thanks!

#133247
Aug 29, 2015 12:00
Vote:
 

Hi,

This is the code we're using to export assets:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="System.Web.UI.Page" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="EPiServer" %>
<%@ Import Namespace="EPiServer.Core" %>
<%@ Import Namespace="EPiServer.Core.Transfer" %>
<%@ Import Namespace="EPiServer.DataAbstraction" %>
<%@ Import Namespace="EPiServer.DataAccess" %>
<%@ Import Namespace="EPiServer.Enterprise" %>
<%@ Import Namespace="EPiServer.Implementation" %>
<%@ Import Namespace="EPiServer.ServiceLocation" %>
<%@ Import Namespace="EPiServer.Personalization.VisitorGroups" %>
<%@ Import Namespace="EPiServer.Framework.Cache" %>
<%@ Import Namespace="EPiServer.Framework.Blobs" %>
<script runat="server">
    private Injected<ITabDefinitionRepository> _tabDefinitionRepository;
    private Injected<IPropertyDefinitionRepository> _propertyDefinitionRepository;
    private Injected<ContentListDB> _contentListDB;
    private static IContentRepository _contentRepository = ServiceLocator.Current.GetInstance<IContentRepository>();

    private static DecoratedClassFactory CreateClassFactory(string type, string id)
    {
        Type concreteType = Type.GetType(type, true);
        return Activator.CreateInstance(concreteType, new Object[] { id }) as DecoratedClassFactory;
    }

    private static void WriteError(System.Web.HttpResponse response, string errorMessage)
    {
        response.Clear();
        response.Write("<span style=\"color: red;\">Error: " + errorMessage + "</span><br />");
        response.End();
    }

    private void Page_Load(object sender, System.EventArgs e)
    {
        DataExporter exporter = new DataExporter();

        //Get all page references and data
        List<PageReference> startPageReferenceList = new List<PageReference>();
        List<ContentData> startPageDataList = new List<ContentData>();
        ContentFolder rootFolder = _contentRepository.GetChildren<ContentFolder>(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(Category.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 + "<br>");
                }
            }
            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=CatalogAssets.episerverdata");
            exporter.Stream.Close();
            Response.WriteFile(file);
        }
        Response.End();
    }
</script>

You might need to change it a bit, such as the root folder.

Regards,

/Q

#133253
Aug 31, 2015 9:23
Vote:
 

Thank you very much for the code! I will try this. It would be nice though if this feature was integrated in the export-tool. Eg. "export all assets".

#133458
Sep 06, 2015 21:31
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.