public ActionResult AddCustomerPack(string level) { var vm = new AddCustomerPackViewModel { EditLevel = level, Levels = EnumExtensions.AsSelectListItems <LevelName>(), DisplayLevel = string.IsNullOrEmpty(level), Filename = "CustomerPack.zip" }; return(PartialView("_AddCustomerPack", vm)); }
public ActionResult AddCustomerPack(AddCustomerPackViewModel model) { if (ModelState.IsValid) { try { if (_appUserContext.Current.CurrentCustomer != null) { // Get the level. var level = model.EditLevel.GetEnumIntFromText <LevelName>(); // Get all the diagrams for this level. var diagrams = _diagramService .Diagrams(_appUserContext.Current.CurrentCustomer.Id) .Where(x => x.Level == level) .ToList(); using (var zipMemoryStream = new MemoryStream()) { // Build the archive using (var zipArchive = new ZipArchive(zipMemoryStream, ZipArchiveMode.Create, true)) { var i = 1; foreach (var diagram in diagrams) { var zipArchiveEntry = zipArchive.CreateEntry(string.Format("{0:000}", i++) + diagram.Filename); using (var zipArchiveEntryStream = zipArchiveEntry.Open()) { zipArchiveEntryStream.Write(diagram.DiagramData, 0 /* offset */, diagram.DiagramData.Length); } } } //Rewind the stream for reading to output. zipMemoryStream.Seek(0, SeekOrigin.Begin); // Create a new Customer Pack entity. var now = DateTime.Now; var customerPack = new CustomerPack { CustomerId = _appUserContext.Current.CurrentCustomer.Id, Filename = model.Filename, Level = level, MimeType = MimeTypeNames.Zip, PackData = zipMemoryStream.ToArray(), PackNotes = model.PackNotes, InsertedDate = now, InsertedBy = _contextManager.UserManager.Name, UpdatedDate = now, UpdatedBy = _contextManager.UserManager.Name }; _customerPackService.Create(customerPack); } } } catch (Exception ex) { _contextManager.ResponseManager.StatusCode = 500; _contextManager.ResponseManager.AppendHeader(ModelStateErrorNames.ErrorMessage, ex.Message); ExceptionPolicy.HandleException(ex, ExceptionPolicies.General); } } return(CustomerPack()); }