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.uploadHelper = new UploadHelper((attr.SubFolder.IsEmptyOrNull() ? "" : (attr.SubFolder + "/")) + (this.fileNameFormat)); return true; }
private string CopyTemporaryFiles(ISaveRequestHandler handler, UploadedFile[] oldFileList, UploadedFile[] newFileList, FilesToDelete filesToDelete) { foreach (var file in newFileList) { var filename = file.Filename.Trim(); if (oldFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) continue; if (!filename.ToLowerInvariant().StartsWith("temporary/")) throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); var uploadHelper = new UploadHelper((subFolder.IsEmptyOrNull() ? "" : (subFolder + "/")) + fileNameFormat); var copyResult = uploadHelper.CopyTemporaryFile(filename, ((IIdRow)handler.Row).IdField[handler.Row].Value, filesToDelete); if (subFolder != null && !this.storeSubFolderInDB) copyResult.DbFileName = copyResult.DbFileName.Substring(subFolder.Length + 1); file.Filename = copyResult.DbFileName; } return JSON.Stringify(newFileList); }
private CopyTemporaryFileResult CopyTemporaryFile(ISaveRequestHandler handler) { var filename = (StringField)(handler.Row.FindField(this.fileNameField) ?? handler.Row.FindFieldByPropertyName(fileNameField)); var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); var uploadHelper = new UploadHelper((subFolder.IsEmptyOrNull() ? "" : (subFolder + "/")) + fileNameFormat); var copyResult = uploadHelper.CopyTemporaryFile(newFilename, ((IIdRow)handler.Row).IdField[handler.Row].Value, filesToDelete); if (subFolder != null && !this.storeSubFolderInDB) copyResult.DbFileName = copyResult.DbFileName.Substring(subFolder.Length + 1); return copyResult; }