protected override DriverResult Editor(ContentPart part, Fields.DbFilesField field, dynamic shapeHelper) { var settings = field.PartFieldDefinition.Settings.GetModel <DbFilesFieldSettings>(); var viewModel = new DbFilesFieldEditViewModel { Name = field.Name, Hint = settings.Hint, IsRequired = settings.Required, AllowMultiple = settings.AllowMultiple, MaxKb = settings.MaxKb, AnnotateFile = settings.AnnotateFile, AnnotateFormatString = settings.AnnotateFormatString, DbFilesViewModel = _dbFilesService.GetFilesForField(field.Name, part.ContentItem.Id) }; return(ContentShape("Fields_DbFilesField_Edit", field.Name, () => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: viewModel, Prefix: GetPrefix(field, part)))); }
protected override DriverResult Editor(ContentPart part, Fields.DbFilesField field, IUpdateModel updater, dynamic shapeHelper) { var viewModel = new DbFilesFieldEditViewModel(); if (updater.TryUpdateModel(viewModel, GetPrefix(field, part), null, null)) { if (!string.IsNullOrEmpty(viewModel.DeleteIds)) { var idsToDelete = viewModel.DeleteIds.Split(','); foreach (var id in idsToDelete) { _dbFilesService.DeleteFile(id); } } var request = ((Controller)updater).Request; var settings = field.PartFieldDefinition.Settings.GetModel <DbFilesFieldSettings>(); var keyName = "DbFiles-" + field.Name; var postedFiles = new List <HttpPostedFileBase>(); for (var i = 0; i < request.Files.Count; i++) { if (request.Files.GetKey(i).Equals(keyName)) { var postedFile = request.Files[i]; if (postedFile != null && postedFile.InputStream.Length > 0) { postedFiles.Add(postedFile); } } } if (settings.Required) { var existingFiles = _dbFilesService.GetFilesForField(field.Name, part.ContentItem.Id); if (!existingFiles.Any() && !postedFiles.Any()) { updater.AddModelError(GetPrefix(field, part), T("{0} is required.", field.DisplayName)); return(Editor(part, field, shapeHelper)); } } try { foreach (var postedFile in postedFiles) { if (postedFile.ContentLength / 1000 > settings.MaxKb) { updater.AddModelError(GetPrefix(field, part), T("{0} is too large.", postedFile.FileName)); } else { var document = new byte[postedFile.ContentLength]; postedFile.InputStream.Read(document, 0, postedFile.ContentLength); var record = new FileUploadRecord { FileData = document, IdContent = part.ContentItem.Id, FieldName = field.Name, FileName = Path.GetFileName(postedFile.FileName), ContentType = postedFile.ContentType }; _fileUploadRepository.Create(record); } } } catch (Exception ex) { updater.AddModelError(GetPrefix(field, part), T("Failed to save {0} - {1}.", field.DisplayName, ex.Message)); } } return(Editor(part, field, shapeHelper)); }