public bool ActivateFor(IRow row) { if (Target is null) { return(false); } attr = Target.GetAttribute <ImageUploadEditorAttribute>(); if (attr == null || attr.DisableDefaultBehavior || attr.EditorType != "MultipleImageUpload") { return(false); } if (!(Target is StringField)) { throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "Field '{0}' on row type '{1}' has a UploadEditor attribute but it is not a String field!", Target.PropertyName ?? Target.Name, row.GetType().FullName)); } if (!(row is IIdRow)) { throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "Field '{0}' on row type '{1}' has a UploadEditor attribute but Row type doesn't implement IIdRow!", Target.PropertyName ?? Target.Name, row.GetType().FullName)); } var format = attr.FilenameFormat; if (format == null) { format = row.GetType().Name; if (format.EndsWith("Row", StringComparison.Ordinal)) { format = format[0..^ 3];
public bool ActivateFor(IRow row) { if (Target is null) { return(false); } attr = Target.GetAttribute <ImageUploadEditorAttribute>(); if (attr == null || attr.DisableDefaultBehavior || attr.EditorType != "ImageUpload") { return(false); } if (!(Target is StringField)) { throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Field '{0}' on row type '{1}' has a UploadEditor attribute but it is not a String field!", Target.PropertyName ?? Target.Name, row.GetType().FullName)); } if (!(row is IIdRow)) { throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Field '{0}' on row type '{1}' has a UploadEditor attribute but Row type doesn't implement IIdRow!", Target.PropertyName ?? Target.Name, row.GetType().FullName)); } if (!attr.OriginalNameProperty.IsEmptyOrNull()) { var originalNameField = row.FindFieldByPropertyName(attr.OriginalNameProperty) ?? row.FindField(attr.OriginalNameProperty); if (originalNameField is null) { throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Field '{0}' on row type '{1}' has a UploadEditor attribute but " + "a field with OriginalNameProperty '{2}' is not found!", Target.PropertyName ?? Target.Name, row.GetType().FullName, attr.OriginalNameProperty)); } this.originalNameField = (StringField)originalNameField; } var format = attr.FilenameFormat; if (format == null) { format = row.GetType().Name; if (format.EndsWith("Row", StringComparison.Ordinal)) { format = format[0..^ 3];
public bool ActivateFor(Row row) { if (ReferenceEquals(null, Target)) { return(false); } attr = Target.GetAttribute <ImageUploadEditorAttribute>(); if (attr == null || attr.DisableDefaultBehavior || attr.EditorType != "MultipleImageUpload") { return(false); } if (!(Target is StringField)) { throw new ArgumentException(String.Format( "Field '{0}' on row type '{1}' has a UploadEditor attribute but it is not a String field!", Target.PropertyName ?? Target.Name, row.GetType().FullName)); } if (!(row is IIdRow)) { throw new ArgumentException(String.Format( "Field '{0}' on row type '{1}' has a UploadEditor attribute but Row type doesn't implement IIdRow!", Target.PropertyName ?? Target.Name, row.GetType().FullName)); } var format = attr.FilenameFormat; if (format == null) { format = row.GetType().Name; if (format.EndsWith("Row")) { format = format.Substring(0, format.Length - 3); } format += "/~"; } this.fileNameFormat = format.Replace("~", SplittedFormat); this.replaceFields = ImageUploadBehavior.ParseReplaceFields(this.fileNameFormat, row, Target); this.uploadHelper = new UploadHelper((attr.SubFolder.IsEmptyOrNull() ? "" : (attr.SubFolder + "/")) + (this.fileNameFormat)); return(true); }
public static void CheckUploadedImageAndCreateThumbs(ImageUploadEditorAttribute attr, ref string temporaryFile) { ImageCheckResult[] supportedFormats = null; if (!attr.AllowNonImage) { supportedFormats = new ImageCheckResult[] { ImageCheckResult.JPEGImage, ImageCheckResult.GIFImage, ImageCheckResult.PNGImage } } ; UploadHelper.CheckFileNameSecurity(temporaryFile); var checker = new ImageChecker(); checker.MinWidth = attr.MinWidth; checker.MaxWidth = attr.MaxWidth; checker.MinHeight = attr.MinHeight; checker.MaxHeight = attr.MaxHeight; checker.MaxDataSize = attr.MaxSize; Image image = null; try { var temporaryPath = UploadHelper.DbFilePath(temporaryFile); using (var fs = new FileStream(temporaryPath, FileMode.Open)) { if (attr.MinSize != 0 && fs.Length < attr.MinSize) { throw new ValidationError(String.Format(Texts.Controls.ImageUpload.UploadFileTooSmall, UploadHelper.FileSizeDisplay(attr.MinSize))); } if (attr.MaxSize != 0 && fs.Length > attr.MaxSize) { throw new ValidationError(String.Format(Texts.Controls.ImageUpload.UploadFileTooBig, UploadHelper.FileSizeDisplay(attr.MaxSize))); } ImageCheckResult result; if (Path.GetExtension(temporaryFile).ToLowerInvariant() == ".swf") { result = ImageCheckResult.FlashMovie; // validate swf file somehow! } else { result = checker.CheckStream(fs, true, out image); } if (result == ImageCheckResult.InvalidImage && attr.AllowNonImage) { return; } if (result > ImageCheckResult.UnsupportedFormat || (supportedFormats != null && Array.IndexOf(supportedFormats, result) < 0)) { string error = checker.FormatErrorMessage(result); throw new ValidationError(error); } if (result >= ImageCheckResult.FlashMovie) { return; } string basePath = UploadHelper.TemporaryPath; string baseFile = Path.GetFileNameWithoutExtension(Path.GetFileName(temporaryPath)); TemporaryFileHelper.PurgeDirectoryDefault(basePath); if ((attr.ScaleWidth > 0 || attr.ScaleHeight > 0) && ((attr.ScaleWidth > 0 && (attr.ScaleSmaller || checker.Width > attr.ScaleWidth)) || (attr.ScaleHeight > 0 && (attr.ScaleSmaller || checker.Height > attr.ScaleHeight)))) { using (Image scaledImage = ThumbnailGenerator.Generate( image, attr.ScaleWidth, attr.ScaleHeight, attr.ScaleMode, Color.Empty)) { temporaryFile = baseFile + ".jpg"; fs.Close(); scaledImage.Save(Path.Combine(basePath, temporaryFile), System.Drawing.Imaging.ImageFormat.Jpeg); temporaryFile = "temporary/" + temporaryFile; } } var thumbSizes = attr.ThumbSizes.TrimToNull(); if (thumbSizes == null) { return; } foreach (var sizeStr in thumbSizes.Replace(";", ",").Split(new char[] { ',' })) { var dims = sizeStr.ToLowerInvariant().Split(new char[] { 'x' }); int w, h; if (dims.Length != 2 || !Int32.TryParse(dims[0], out w) || !Int32.TryParse(dims[1], out h) || w < 0 || h < 0 || (w == 0 && h == 0)) { throw new ArgumentOutOfRangeException("thumbSizes"); } using (Image thumbImage = ThumbnailGenerator.Generate(image, w, h, attr.ThumbMode, Color.Empty)) { string thumbFile = Path.Combine(basePath, baseFile + "_t" + w.ToInvariant() + "x" + h.ToInvariant() + ".jpg"); thumbImage.Save(thumbFile); } } } } finally { if (image != null) { image.Dispose(); } } } }