public virtual IFileUploadInfo LoadFile(Guid entitySchemaUId, Guid fileId, BinaryWriter binaryWriter) { EntitySchema entitySchema = UserConnection.EntitySchemaManager.GetInstanceByUId(entitySchemaUId); if (!CheckReadFileAccess(entitySchema, fileId)) { Log.Info($"LoadFile: CheckReadFileAccess = false for fileId: ${fileId}"); return(null); } Entity entity = entitySchema.CreateEntity(UserConnection); Select selectData = (new Select(UserConnection) .Column("Name") .Column(Func.DataLength("Data")).As("Size") .Column("Data") .From(entity.SchemaName) .Where("Id") .IsEqual(Column.Parameter(fileId))) as Select; selectData.SpecifyNoLockHints(); using (DBExecutor executor = UserConnection.EnsureDBConnection()) { using (IDataReader reader = selectData.ExecuteReader(executor, CommandBehavior.SequentialAccess)) { if (reader.Read()) { string fileName = reader["Name"].ToString(); int sizeColumnIndex = reader.GetOrdinal("Size"); object sizeValue = reader[sizeColumnIndex]; if (DBNull.Value.Equals(sizeValue)) { Log.Info($"LoadFile: file size is null for fileId: ${fileId}"); return(null); } int size = UserConnection.DBTypeConverter.DBValueToInt(sizeValue); long offset = 0; int bufferOffset = 0; int chunkSize = 524288; byte[] buffer = new byte[chunkSize]; long realBytes = 0; while (offset < size) { Array.Clear(buffer, 0, buffer.Length); realBytes = reader.GetBytes(2, offset, buffer, bufferOffset, chunkSize); if (realBytes <= 0) { break; } offset += realBytes; binaryWriter.Write(buffer, 0, Convert.ToInt32(realBytes)); binaryWriter.Flush(); } var feui = new FileEntityUploadInfo(entitySchema.Name, fileId, fileName); feui.TotalFileLength = size; return(feui); } } } Log.Info($"LoadFile: file not found with Id: ${fileId}"); return(null); }
/// <inheritdoc cref="IFileUploader.UploadAttach(Guid, string, byte[])"/> public void UploadAttach(Guid fileId, string name, byte[] data) { var fileRepository = ClassFactory.Get <FileRepository>(new ConstructorArgument("userConnection", _userConnection)); var fileEntityInfo = new FileEntityUploadInfo("ActivityFile", fileId, name) { Content = new MemoryStream(data), TotalFileLength = data.Length }; fileRepository.UploadFile(fileEntityInfo, false); }
public Guid CreateFileEntity(JsonEntityFile jsonEntityFile) { var fileRepository = ClassFactory.Get <FileRepository>( new ConstructorArgument("userConnection", UserConnection)); var fileId = Guid.NewGuid(); byte[] data = Convert.FromBase64String(jsonEntityFile.Data); var fileEntityInfo = new FileEntityUploadInfo(jsonEntityFile.EntityName, fileId, jsonEntityFile.Name); fileEntityInfo.ParentColumnName = jsonEntityFile.EntityColumnName; fileEntityInfo.ParentColumnValue = jsonEntityFile.EntityId; fileEntityInfo.TotalFileLength = jsonEntityFile.Size; fileEntityInfo.Content = new MemoryStream(data); fileEntityInfo.TypeId = jsonEntityFile.TypeId; fileEntityInfo.Version = jsonEntityFile.Version; fileRepository.UploadFile(fileEntityInfo); return(fileId); }
public static void CopyFileDetail(UserConnection userConnection, Guid srcRecordId, Guid targetRecordId, string srcSchema, string targetSchema, bool isChangeHtmlBody = false) { if (string.IsNullOrEmpty(targetSchema)) { targetSchema = srcSchema; } //TODO: #MK-5074 Remove after renaming 'FileLead' schema to 'LeadFile'. var targetFileSchemaName = targetSchema.Equals("Lead") ? "FileLead" : string.Format("{0}File", targetSchema); var srcFileSchemaName = targetSchema.Equals("Lead") ? "FileLead" : string.Format("{0}File", srcSchema); var targetEntitySchema = userConnection.EntitySchemaManager.GetInstanceByName(targetFileSchemaName); var srcEntitySchema = userConnection.EntitySchemaManager.GetInstanceByName(srcFileSchemaName); Dictionary <Guid, Guid> fileList = new Dictionary <Guid, Guid>(); var srcESQ = new EntitySchemaQuery(srcEntitySchema); var idColumn = srcESQ.AddColumn(srcESQ.RootSchema.GetPrimaryColumnName()); srcESQ.Filters.Add(srcESQ.CreateFilterWithParameters(FilterComparisonType.Equal, srcSchema, srcRecordId)); var srcList = srcESQ.GetEntityCollection(userConnection); var fileRepository = ClassFactory.Get <FileRepository>( new ConstructorArgument("userConnection", userConnection)); foreach (var src in srcList) { var idSchemaColumn = src.Schema.Columns.GetByName(idColumn.Name); var fileId = src.GetTypedColumnValue <Guid>(idSchemaColumn.ColumnValueName); Guid newGuid = Guid.NewGuid(); using (var memoryStream = new MemoryStream()) { var bwriter = new BinaryWriter(memoryStream); var fileInfo = fileRepository.LoadFile(srcEntitySchema.UId, fileId, bwriter); var fileEntityInfo = new FileEntityUploadInfo(targetFileSchemaName, newGuid, fileInfo.FileName); fileEntityInfo.ParentColumnName = targetSchema; fileEntityInfo.ParentColumnValue = targetRecordId; fileEntityInfo.TotalFileLength = fileInfo.TotalFileLength; fileEntityInfo.Content = memoryStream; if (fileRepository.UploadFile(fileEntityInfo)) { fileList.Add((Guid)fileId, newGuid); } } } if (isChangeHtmlBody && fileList.Count > 0) { string columnName = string.Empty; var targetModuleEntitySchema = userConnection.EntitySchemaManager.GetInstanceByName(targetSchema); if (targetModuleEntitySchema.FindSchemaColumnByPath("Body") != null) { columnName = "Body"; } if (targetModuleEntitySchema.FindSchemaColumnByPath("HtmlBody") != null) { columnName = "HtmlBody"; } if (!string.IsNullOrEmpty(columnName)) { var targetModuleEntity = targetModuleEntitySchema.CreateEntity(userConnection); if (targetModuleEntity.FetchFromDB(targetRecordId)) { string messageBody = targetModuleEntity.GetTypedColumnValue <string>(columnName); messageBody = messageBody.Replace(srcRecordId.ToString(), targetRecordId.ToString()); foreach (var item in fileList) { messageBody = messageBody.Replace(item.Key.ToString().ToLower(), item.Value.ToString().ToLower()); } var update = new Update(userConnection, targetSchema) .Set(columnName, Column.Parameter(messageBody)) .Where("Id").IsEqual(Column.Parameter(targetRecordId)); update.Execute(); } } } }
/// <summary> /// ######### ########### ## ###### "##### # ######" # ############ ###### ####### ###### ## ########### /// # ######## HtmlEdit ## ####### /// </summary> /// <param name="userConnection">UserConnection ######## ############</param> /// <param name="htmlEdit">######## HtmlEdit</param> /// <param name="entitySchema">##### #######, # ####### ######### ###########</param> /// <param name="entityId">UId #######, # ####### ######### ###########</param> public static void SaveAndInsertImage(UserConnection userConnection, HtmlEdit htmlEdit, EntitySchema entitySchema, Guid entityId) { // ######### ####### ##### if (Page.Request.Files.Count == 0) { return; } // ######## ##### ###### "##### # ######", #### ##### ##### ### - ###### ## ###### EntitySchemaManager esm = userConnection.EntitySchemaManager; string fileSchemaName = entitySchema.Name + "File"; EntitySchema fileEntitySchema = esm.FindInstanceByName(fileSchemaName); if (fileEntitySchema == null) { return; } string fileFieldName = htmlEdit.ClientID + "_loadedImage-file"; HttpPostedFile file = Page.Request.Files[fileFieldName]; string fileName = file.FileName; if (string.IsNullOrEmpty(fileName)) { return; } // ######## ###### #### ### ###### ##### Stream fileStream = file.InputStream; fileStream.Position = 0; long fileSize = fileStream.Length; var fileData = new byte[fileStream.Length]; fileStream.Read(fileData, 0, fileData.Length); var img = Image.FromStream(fileStream); if (GraphicUtilities.GetImageFormat(img.RawFormat) == null) { var warning = GetLocalizableStringValue(userConnection, "Warning"); var fileTypeError = GetLocalizableStringValue(userConnection, "FileTypeError"); const string messageCallback = @" function() {{}} "; string showMessageScript = ClientScriptUtilities.GetMessageScript(warning, fileTypeError, MessageBoxButtons.Ok, MessageBoxIcon.Information, messageCallback); ScriptManager.AddScript(showMessageScript); return; } // crea Entity ### ###### ##### # ######### ## var fileUId = Guid.NewGuid(); var fileRepository = ClassFactory.Get <FileRepository>( new ConstructorArgument("userConnection", userConnection)); var fileEntityInfo = new FileEntityUploadInfo(fileSchemaName, fileUId, fileName); fileEntityInfo.ParentColumnName = entitySchema.Name; fileEntityInfo.ParentColumnValue = entityId; fileEntityInfo.TotalFileLength = fileData.Length; fileEntityInfo.Content = new MemoryStream(fileData); fileRepository.UploadFile(fileEntityInfo); // ####### ###### ControlImage # ############## ### var controlImage = new ControlImage { // ###### ##### ###########. # ###### ###### ## Entity Source = ControlImageSource.EntityColumn, // ## ##### EntitySchema-# ##### ######## Entity SchemaUId = fileEntitySchema.UId, // ######### ####### (ID ######) EntityPrimaryColumnValue = fileUId, // ####### ## ####### ##### ######## ######. #### ###### #### UsePrimaryImageColumn, ######### ## ########### EntitySchemaColumnUId = fileEntitySchema.Columns.GetByName("Data").UId, UsePrimaryImageColumn = false }; // ### ##### ######## ########## ###### ControlImage ###### ######## ##########. // ######### ###### ### ##### ##### ########### # ######### #######. // ## ###### ###### ## ###### ############## ############# ###### # ######## ### ## ###### string controlImageValue = Json.Serialize(controlImage, new ControlImageJsonConverter()); ScriptManager.AddScript(string.Format("{0}.insertImage({1})", htmlEdit.ClientID, controlImageValue)); }