public async Task <ActionResult <ContentStatistic> > GetStoreContentStatsAsync(string storeId) { var contentStorageProvider = _blobContentStorageProviderFactory.CreateProvider(""); var cacheKey = CacheKey.With(GetType(), "pagesCount", $"content-{storeId}"); var pagesCount = _platformMemoryCache.GetOrCreateExclusive(cacheKey, cacheEntry => { cacheEntry.AddExpirationToken(ContentCacheRegion.CreateChangeToken($"content-{storeId}")); var result = CountContentItemsRecursive(GetContentBasePath("pages", storeId), contentStorageProvider, GetContentBasePath("blogs", storeId)); return(result); }); var themesTask = contentStorageProvider.SearchAsync(GetContentBasePath("themes", storeId), null); var blogsTask = contentStorageProvider.SearchAsync(GetContentBasePath("blogs", storeId), null); await Task.WhenAll(themesTask, blogsTask); var themes = themesTask.Result; var blogs = blogsTask.Result; var retVal = new ContentStatistic { ActiveThemeName = "default", ThemesCount = themes.Results.OfType <BlobFolder>().Count(), BlogsCount = blogs.Results.OfType <BlobFolder>().Count(), PagesCount = pagesCount }; return(Ok(retVal)); }
public async Task <ActionResult <ContentStatistic> > GetStoreContentStats(string storeId) { var contentStorageProvider = _blobContentStorageProviderFactory.CreateProvider(""); var cacheKey = CacheKey.With(GetType(), "pagesCount", $"content-{storeId}"); var pagesCount = _platformMemoryCache.GetOrCreateExclusive(cacheKey, cacheEntry => { cacheEntry.AddExpirationToken(ContentCacheRegion.CreateChangeToken($"content-{storeId}")); var result = CountContentItemsRecursive(GetContentBasePath("pages", storeId), contentStorageProvider, _blogsFolderName); return(result); }); var storeTask = _storeService.GetByIdAsync(storeId, StoreResponseGroup.DynamicProperties.ToString()); var themesTask = contentStorageProvider.SearchAsync(GetContentBasePath("themes", storeId), null); var blogsTask = contentStorageProvider.SearchAsync(GetContentBasePath(_blogsFolderName, storeId), null); await Task.WhenAll(themesTask, blogsTask, storeTask); var store = storeTask.Result; var themes = themesTask.Result; var blogs = blogsTask.Result; var retVal = new ContentStatistic { ActiveThemeName = store.DynamicProperties.FirstOrDefault(x => x.Name == "DefaultThemeName")?.Values?.FirstOrDefault()?.Value.ToString() ?? "default", ThemesCount = themes.Results.OfType <BlobFolder>().Count(), BlogsCount = blogs.Results.OfType <BlobFolder>().Count(), PagesCount = pagesCount }; return(Ok(retVal)); }
public async Task <ActionResult> DeleteContentAsync(string contentType, string storeId, [FromQuery] string[] urls) { var storageProvider = _blobContentStorageProviderFactory.CreateProvider(GetContentBasePath(contentType, storeId)); await storageProvider.RemoveAsync(urls); //ToDo Reset cached items //_cacheManager.ClearRegion($"content-{storeId}"); ContentCacheRegion.ExpireRegion(); return(Ok()); }
public async Task <IActionResult> UploadContent(string contentType, string storeId, [FromQuery] string folderUrl, [FromQuery] string url = null) { if (url == null && !MultipartRequestHelper.IsMultipartContentType(Request.ContentType)) { return(BadRequest($"Expected a multipart request, but got {Request.ContentType}")); } var retVal = new List <ContentFile>(); var storageProvider = _blobContentStorageProviderFactory.CreateProvider(GetContentBasePath(contentType, storeId)); if (url != null) { var fileName = HttpUtility.UrlDecode(Path.GetFileName(url)); var fileUrl = folderUrl + "/" + fileName; using (var client = new WebClient()) using (var blobStream = storageProvider.OpenWrite(fileUrl)) using (var remoteStream = client.OpenRead(url)) { remoteStream.CopyTo(blobStream); var сontentFile = AbstractTypeFactory <ContentFile> .TryCreateInstance(); сontentFile.Name = fileName; сontentFile.Url = storageProvider.GetAbsoluteUrl(fileUrl); retVal.Add(сontentFile); } } else { var boundary = MultipartRequestHelper.GetBoundary(MediaTypeHeaderValue.Parse(Request.ContentType), _defaultFormOptions.MultipartBoundaryLengthLimit); var reader = new MultipartReader(boundary, HttpContext.Request.Body); var section = await reader.ReadNextSectionAsync(); if (section != null) { var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out var contentDisposition); if (hasContentDispositionHeader) { var fileName = contentDisposition.FileName.Value ?? contentDisposition.Name.Value.Replace("\"", string.Empty); var targetFilePath = folderUrl + "/" + fileName; using (var targetStream = storageProvider.OpenWrite(targetFilePath)) { await section.Body.CopyToAsync(targetStream); } var contentFile = AbstractTypeFactory <ContentFile> .TryCreateInstance(); contentFile.Name = fileName; contentFile.Url = storageProvider.GetAbsoluteUrl(targetFilePath); retVal.Add(contentFile); } } } ContentCacheRegion.ExpireContent(($"content-{storeId}")); return(Ok(retVal.ToArray())); }