public async Task <IActionResult> UploadFile(IFormFile file, MinimizationType opt) { // путь к папке Temp string name = GetRandomString(20); var ms = new MemoryStream(); await file.CopyToAsync(ms); ms.Position = 0; Dictionary <string, Stream> files = null; try { files = archiveManager.Uncompress(ms); } catch { return(BadRequest("Не удалось разобрать архив")); } var manager = new Manager(files); var folder = new Folder { Id = name, Files = files, IsProcessing = true, Manager = manager }; foldersService.Folders.Add(folder); Task.Run(() => { return(manager.ToMinimize(opt)); }).ContinueWith((result) => { var findFolder = foldersService.Folders.FirstOrDefault(i => i.Id == name); findFolder.Messages = result.Result; findFolder.IsProcessing = false; }); return(RedirectToRoute(new { id = name })); }
public List <IOutputMessage> ToMinimize(MinimizationType min) { valueProvider = new ValueProvider(); var csso = new CssOptimizer.Csso(); var jso = new JsOptimizerFacade(); Parallel.ForEach(files, item => { var filePath = item.Key.Replace('/', '\\'); var type = fileIdentifying.GetType(filePath, item.Value); Stream stream = item.Value; if (type == Entities.FileType.Css && min.IsCommonCss) { stream = csso.ToOptimize(item.Value) ?? stream; } else if (type == Entities.FileType.Js && min.IsCommonJs) { stream = jso.ToOptimize(filePath, item.Value, valueProvider.GetOutputMessages()) ?? stream; } valueProvider.AddFile(parseFile.ToParse(filePath, stream, type)); }); List <Abstract.IEditor> listOpt = new List <Abstract.IEditor>(); if (min.IsLoadExtJsFile) { listOpt.Add(new HtmlLoadExtJsEditor()); } listOpt.Add(new HtmlInternalContentEditor()); if (min.IsUnionJsFile) { listOpt.Add(new HtmlUnionJsEditor()); } if (min.IsUnionCssFile) { listOpt.Add(new HtmlUnionCssEditor()); } listOpt.Add(new JsWsSymbolsEditor()); listOpt.Add(new JsEofTokenRemover()); listOpt.Add(new HtmlWsSymbolsEditor()); if (min.IsCommentHtml) { listOpt.Add(new HtmlCommentEditor()); } if (min.IsCommonJs) { listOpt.Add(new JsMinifyingEditor()); if (min.IsUnionJsFile) { listOpt.Add(new JsMinifyingEditor(false)); } } if (min.IsCommonCss) { listOpt.Add(new CssMinifyingEditor()); if (min.IsUnionCssFile) { listOpt.Add(new CssMinifyingEditor(false)); } } if (min.IsNames) { listOpt.Add(new NamesEditor()); } if (min.IsImage) { listOpt.Add(new ImageEditor()); } listOpt.ForEach(i => i.ToEdit(valueProvider)); var list = new List <IOutputMessage>(); list.AddRange(valueProvider.GetOutputMessages()); return(list); }