November Happy Hour will be moved to Thursday December 5th.

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.