コード例 #1
0
        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))));
        }
コード例 #2
0
        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));
        }