Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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();
                    }
                }
            }
        }
Пример #5
0
        /// <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));
        }