protected override DriverResult Editor(ContentPart part, Fields.FileField field, dynamic shapeHelper) { var settings = field.PartFieldDefinition.Settings.GetModel <FileFieldSettings>(); AssignDefaultMediaFolder(settings); var viewModel = new FileFieldViewModel { Settings = settings, Field = field }; return(ContentShape("Fields_Project_File_Edit", GetDifferentiator(field, part), () => shapeHelper.EditorTemplate(TemplateName: "Fields/Project.File", Model: viewModel, Prefix: GetPrefix(field, part)))); }
protected override DriverResult Editor(ContentPart part, Fields.FileField field, IUpdateModel updater, dynamic shapeHelper) { var settings = field.PartFieldDefinition.Settings.GetModel <FileFieldSettings>(); var viewModel = new FileFieldViewModel { Settings = settings, Field = field }; if (updater.TryUpdateModel(viewModel, GetPrefix(field, part), null, null)) { var postedFile = ((Controller)updater).Request.Files["FileField-" + field.Name]; AssignDefaultMediaFolder(settings); var mediaFolder = FormatWithTokens(settings.MediaFolder, part.ContentItem.ContentType, field.Name, part.ContentItem.Id); if (postedFile != null && postedFile.ContentLength != 0) { var extension = ParseFileExtenstion(postedFile.FileName); var allowedExtensions = ParseAllowedExtention(settings.ExtenstionsAllowed); var fileName = Path.GetFileNameWithoutExtension(postedFile.FileName); if (allowedExtensions.Contains(extension)) { if (postedFile.ContentLength <= (settings.MaxFileSize * 1024)) { var postedFileLength = postedFile.ContentLength; var postedFileData = new byte[postedFileLength]; var postedFileStream = postedFile.InputStream; postedFileStream.Read(postedFileData, 0, postedFileLength); try { // try to create the folder before uploading a file into it _storageProvider.CreateFolder(mediaFolder); } catch { // the folder can't be created because it already exists, continue } if (settings.NameTag == NameTags.Index) { var lastFileIndex = _storageProvider.ListFiles(mediaFolder) .Count(f => Path.GetFileNameWithoutExtension(f.GetName()).Contains(fileName)); fileName = String.Format("{0} ({1}).{2}", fileName, lastFileIndex + 1, extension); } else if (settings.NameTag == NameTags.TimeStamp) { fileName = String.Format("{0}-{1}.{2}", fileName, DateTime.Now.ToString("yyyyMMddhhmmss"), extension); } // var filePath = _storageProvider.Combine(mediaFolder, fileName); var file = _storageProvider.CreateFile(filePath); using (var fileStream = file.OpenWrite()) { fileStream.Write(postedFileData, 0, postedFileLength); } field.Path = _storageProvider.GetPublicUrl(file.GetPath()); } else { updater.AddModelError("File", T("The file size is bigger than the maximum file size, maximum size is {0}KB.", settings.MaxFileSize)); } } else { updater.AddModelError("File", T("The file type is not allowed for {0}.", postedFile.FileName)); } } else { if (settings.Required && string.IsNullOrWhiteSpace(field.Path)) { updater.AddModelError("File", T("You must provide a file for {0}.", field.Name.CamelFriendly())); } } if (string.IsNullOrWhiteSpace(field.Text)) { field.Text = Path.GetFileName(field.Path); } } return(Editor(part, field, shapeHelper)); }