public ActionResult ExportSite(ConfigurationViewModel model) { if (model.LocalSelectedSiteName.IsNullOrEmpty()) { model = GetConfigurationViewModel(); ModelState.AddModelError(nameof(model.LocalSelectedSiteName), "Site is required."); return(View("Index", model)); } var site = SiteDefinitionRepository.List() .FirstOrDefault(_ => _.Name.Equals(model.LocalSelectedSiteName)); if (site == null) { model = GetConfigurationViewModel(); ModelState.AddModelError(nameof(model.LocalSelectedSiteName), "Site is required."); return(View("Index", model)); } if (model.SiteExportLocation.Equals("Remote", StringComparison.InvariantCultureIgnoreCase) && model.LocalSiteName.IsNullOrEmpty()) { model = GetConfigurationViewModel(); ModelState.AddModelError(nameof(model.LocalSiteName), "Blob Storage Site name is required."); return(View("Index", model)); } var fileName = model.LocalSiteName; if (fileName.IsNullOrEmpty()) { fileName = $"{site.Name}.episerverdata"; } if (!fileName.EndsWith(".episerverdata", StringComparison.InvariantCultureIgnoreCase)) { fileName += ".episerverdata"; } if (model.SiteExportLocation.Equals("Remote", StringComparison.InvariantCultureIgnoreCase)) { using (var exportStream = InstallService.ExportEpiserverContent(site.StartPage, ContentExport.ExportPages | ContentExport.ExportVisitorGroups)) { StorageService.Add($"Sites/{fileName}", exportStream, exportStream.Length); return(RedirectToAction("Index")); } } var stream = InstallService.ExportEpiserverContent(site.StartPage, ContentExport.ExportPages | ContentExport.ExportVisitorGroups); return(File(stream, "application/octet-stream", fileName)); }
public ActionResult ExportCatalog(ConfigurationViewModel model) { if (model.LocalSelectedCatalogName.IsNullOrEmpty()) { model = GetConfigurationViewModel(); ModelState.AddModelError(nameof(model.LocalSelectedCatalogName), "Catalog is required."); return(View("Index", model)); } if (model.MediaFolder.IsNullOrEmpty()) { model = GetConfigurationViewModel(); ModelState.AddModelError(nameof(model.MediaFolder), "Media folder is required."); return(View("Index", model)); } var catalog = ContentRepository.GetChildren <CatalogContent>(ReferenceConverter.GetRootLink()) .FirstOrDefault(_ => _.Name.Equals(model.LocalSelectedCatalogName)); if (catalog == null) { model = GetConfigurationViewModel(); ModelState.AddModelError(nameof(model.LocalSelectedCatalogName), "Catalog is required."); return(View("Index", model)); } var mediaFolder = ContentRepository.Get <ContentFolder>(ContentReference.Parse(model.MediaFolder)); if (mediaFolder == null) { model = GetConfigurationViewModel(); ModelState.AddModelError(nameof(model.MediaFolder), "Media folder is required."); return(View("Index", model)); } if (model.CatalogExportLocation.Equals("Remote", StringComparison.InvariantCultureIgnoreCase) && model.LocalCatalogName.IsNullOrEmpty()) { model = GetConfigurationViewModel(); ModelState.AddModelError(nameof(model.LocalCatalogName), "Blob Storage Catalog name is required."); return(View("Index", model)); } using (var stream = new MemoryStream()) { _catalogImportExport.Export(model.LocalSelectedCatalogName, stream, ""); stream.Position = 0; var document = XDocument.Load(stream); document.Element("Catalogs").Element("MetaDataScheme").ReplaceWith(GetMetaDataScheme()); document.Element("Catalogs").Element("Dictionaries").ReplaceWith(GetDictionaries()); var newStream = new MemoryStream(); var writer = XmlWriter.Create(newStream); document.Save(writer); writer.Close(); newStream.Position = 0; var media = InstallService.ExportEpiserverContent(mediaFolder.ContentLink, ContentExport.ExportPages); var zip = CreateArchiveStream(new Dictionary <string, Stream>() { { "Catalog.xml", newStream }, { "ProductAssets.episerverdata", media } }); var zipName = model.LocalCatalogName.IsNullOrEmpty() ? model.LocalSelectedCatalogName : model.LocalCatalogName; if (!zipName.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase)) { zipName += ".zip"; } if (model.CatalogExportLocation.Equals("Remote", StringComparison.InvariantCultureIgnoreCase)) { StorageService.Add($"Catalogs/{zipName}", zip, zip.Length); return(RedirectToAction("Index")); } return(File(zip, "application/octet-stream", zipName)); } }