private void DeleteOldFile(FilesToDelete filesToDelete, string oldFilename) { if (!oldFilename.IsEmptyOrNull()) { var actualOldFile = (attr.SubFolder.IsEmptyOrNull() ? "" : (attr.SubFolder + "/")) + oldFilename; filesToDelete.RegisterOldFile(actualOldFile); if (attr.CopyToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) { UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } } }
public override void OnBeforeSave(ISaveRequestHandler handler) { var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] = filesToDelete; var filename = (StringField)(Target); var oldFilename = handler.IsCreate ? null : filename[handler.Old]; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (oldFilename.IsTrimmedSame(newFilename)) { filename[handler.Row] = oldFilename; return; } if (!oldFilename.IsEmptyOrNull()) { var actualOldFile = (attr.SubFolder.IsEmptyOrNull() ? "" : (attr.SubFolder + "/")) + oldFilename; filesToDelete.RegisterOldFile(actualOldFile); if (attr.CopyToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) { UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } } if (newFilename == null) { if (oldFilename.IsTrimmedEmpty()) { return; } filename[handler.Row] = null; if (!ReferenceEquals(null, originalNameField)) { originalNameField[handler.Row] = null; } return; } if (!newFilename.ToLowerInvariant().StartsWith("temporary/")) { throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); } if (!ReferenceEquals(null, originalNameField)) { var originalName = File.ReadAllText(Path.ChangeExtension( UploadHelper.DbFilePath(newFilename), ".orig")).TrimToNull(); originalNameField[handler.Row] = originalName; } if (handler.IsUpdate) { var copyResult = CopyTemporaryFile(handler, filesToDelete); filename[handler.Row] = copyResult.DbFileName; } }