Exemplo n.º 1
0
        public FileManagerResponse UploadFile(string path, IList <IFormFile> uploadFiles, string action)
        {
            long filesLength = 0;

            //add ServerFile entity for each file uploaded
            foreach (var file in uploadFiles)
            {
                path = Path.Combine(path, file.FileName);
                var folderId = GetFolderId(path);

                SaveServerFileViewModel viewModel = new SaveServerFileViewModel()
                {
                    Id                  = Guid.NewGuid(), //TODO: update to match args id
                    ContentType         = file.ContentType,
                    CorrelationEntity   = "",             //TODO: update or remove from ServerFileViewModel and ServerFile
                    CorrelationEntityId = Guid.Empty,     //TODO: update or remove from ServerFileViewModel and ServerFile
                    File                = file,
                    HashCode            = null,
                    StorageFolderId     = folderId,
                    SizeInBytes         = file.Length,
                    StoragePath         = path,
                    StorageProvider     = "LocalFileStorage"
                };

                SaveFile(viewModel);

                filesLength += file.Length;
            }

            //add to SizeInBytes property in ServerDrive
            var serverDrive = GetDrive();

            serverDrive.StorageSizeInBytes += filesLength;
            serverDriveRepository.Update(serverDrive);
            webhookPublisher.PublishAsync("Files.DriveUpdated", serverDrive.Id.ToString(), serverDrive.Name);

            FileManagerResponse uploadResponse = operation.Upload(path, uploadFiles, action, null);

            return(uploadResponse);
        }
Exemplo n.º 2
0
        public object LocalFileStorageOperation(FileManagerDirectoryContent args)
        {
            if (args.Action == "delete" || args.Action == "rename")
            {
                if ((args.TargetPath == null) && (args.Path == ""))
                {
                    FileManagerResponse response = new FileManagerResponse();
                    response.Error = new ErrorDetails {
                        Code = "401", Message = "Restricted to modify the root folder."
                    };
                    return(this.operation.ToCamelCase(response));
                }
            }

            var          serverDrive  = GetDrive();
            var          entityId     = Guid.Parse(args.Id);
            ServerFile   serverFile   = new ServerFile();
            ServerFolder serverFolder = new ServerFolder();

            if (args.IsFile)
            {
                serverFile = serverFileRepository.GetOne(entityId);
            }
            else
            {
                serverFolder = serverFolderRepository.GetOne(entityId);
            }

            switch (args.Action)
            {
            case "read":
                //reads the file(s) or folder(s) from the given path

                //update FileAttribute (retrieval)
                var fileAttribute = fileAttributeRepository.Find(null).Items?.Where(q => q.Name == FileAttributes.RetrievalCount.ToString() &&
                                                                                    q.ServerFileId == entityId).FirstOrDefault();
                fileAttribute.AttributeValue += 1;
                fileAttributeRepository.Update(fileAttribute);

                return(this.operation.ToCamelCase(this.operation.GetFiles(args.Path, args.ShowHiddenItems)));

            case "delete":
                //deletes the selected file(s) or folder(s) from the given path
                if (args.IsFile.Equals(true))
                {
                    DeleteFile(args.Path);
                    serverDrive.StorageSizeInBytes -= args.Size;
                }
                else
                {
                    //removes the size of folder and any files from server drive property
                    var  files    = serverFileRepository.Find(null).Items?.Where(q => q.StorageFolderId == entityId);
                    long fileSize = 0;
                    foreach (var file in files)
                    {
                        fileSize += file.SizeInBytes;
                    }
                    serverDrive.StorageSizeInBytes -= args.Size - fileSize;

                    DeleteFolder(args.Path);
                }

                serverDriveRepository.Update(serverDrive);
                webhookPublisher.PublishAsync("Files.DriveUpdated", serverDrive.Id.ToString(), serverDrive.Name);

                return(this.operation.ToCamelCase(this.operation.Delete(args.Path, args.Names)));

            case "copy":
                //copies the selected file(s) or folder(s) from a path and then pastes them into a given target path
                if (args.IsFile.Equals(true))
                {
                    foreach (var file in args.UploadFiles)
                    {
                        var folderId = GetFolderId(args.Path);

                        //add serverFile entity
                        SaveServerFileViewModel viewModel = new SaveServerFileViewModel()
                        {
                            Id                  = Guid.Parse(args.Id),
                            ContentType         = file.ContentType,
                            CorrelationEntity   = "",         //TODO: update or remove
                            CorrelationEntityId = Guid.Empty, //TODO: update or remove
                            HashCode            = null,
                            SizeInBytes         = file.Length,
                            StorageFolderId     = folderId,
                            StoragePath         = args.Path,
                            StorageProvider     = "LocalFileStorage",
                            File                = file
                        };
                        SaveFile(viewModel);
                    }
                }
                else
                {
                    //add serverFolder entity
                    AddFolder(args);
                }
                AddBytesToServerDrive(serverDrive, args.Size);

                return(this.operation.ToCamelCase(this.operation.Copy(args.Path, args.TargetPath, args.Names, args.RenameFiles, args.TargetData)));

            case "move":
                //cuts the selected file(s) or folder(s) from a path and then pastes them into a given target path
                if (args.IsFile.Equals(true))
                {
                    foreach (var file in args.UploadFiles)
                    {
                        var folderId = GetFolderId(args.Path);
                        UpdateServerFileViewModel viewModel = new UpdateServerFileViewModel()
                        {
                            ContentType         = file.ContentType,
                            CorrelationEntity   = "",         //TODO: remove or update
                            CorrelationEntityId = Guid.Empty, //TODO: remove or update
                            HashCode            = null,
                            File            = file,
                            SizeInBytes     = file.Length,
                            StorageFolderId = folderId,
                            StoragePath     = Path.Combine(args.Path, file.FileName),
                            StorageProvider = "LocalFileStorage"
                        };
                        UpdateFile(viewModel);
                    }
                }
                else
                {
                    //update ServerFolder entity
                    serverFolder.ParentFolderId = Guid.Parse(args.ParentId);
                    serverFolder.StoragePath    = args.Path;
                    serverFolderRepository.Update(serverFolder);
                    webhookPublisher.PublishAsync("Files.FolderUpdated", serverFolder.Id.ToString(), serverFolder.Name);
                }

                return(this.operation.ToCamelCase(this.operation.Move(args.Path, args.TargetPath, args.Names, args.RenameFiles, args.TargetData)));

            case "details":
                //gets the details of the selected file(s) or folder(s)
                return(this.operation.ToCamelCase(this.operation.Details(args.Path, args.Names, args.Data)));

            case "create":
                //creates a new folder in a given path

                //add ServerFolder entity
                AddFolder(args);
                AddBytesToServerDrive(serverDrive, args.Size);

                return(this.operation.ToCamelCase(this.operation.Create(args.Path, args.Name)));

            case "search":
                //gets the list of file(s) or folder(s) from a given path based on the searched key string

                //add to retrieval count value to file attribute entity for each file
                //update FileAttribute (retrieval)
                foreach (var file in args.UploadFiles)
                {
                    fileAttribute = fileAttributeRepository.Find(null).Items?.Where(q => q.Name == FileAttributes.RetrievalCount.ToString() &&
                                                                                    q.ServerFileId == entityId).FirstOrDefault();
                    fileAttribute.AttributeValue += 1;
                    fileAttributeRepository.Update(fileAttribute);
                }

                return(this.operation.ToCamelCase(this.operation.Search(args.Path, args.SearchString, args.ShowHiddenItems, args.CaseSensitive)));

            case "rename":
                //renames a file or folder
                if (args.IsFile.Equals(true))
                {
                    //update ServerFile entity
                    foreach (var file in args.UploadFiles)
                    {
                        var folderId = GetFolderId(args.Path);
                        UpdateServerFileViewModel viewModel = new UpdateServerFileViewModel()
                        {
                            ContentType         = file.ContentType,
                            CorrelationEntity   = "",         //TODO: remove or update
                            CorrelationEntityId = Guid.Empty, //TODO: remove or update
                            HashCode            = null,
                            File            = file,
                            SizeInBytes     = file.Length,
                            StorageFolderId = folderId,
                            StoragePath     = Path.Combine(args.Path, file.FileName),
                            StorageProvider = "LocalFileStorage"
                        };
                        UpdateFile(viewModel);
                    }
                }
                else
                {
                    //update ServerFolder entity
                    serverFolder.ParentFolderId = Guid.Parse(args.ParentId);
                    serverFolder.StoragePath    = args.Path;
                    serverFolderRepository.Update(serverFolder);
                    webhookPublisher.PublishAsync("Files.FolderUpdated", serverFolder.Id.ToString(), serverFolder.Name);
                }
                return(this.operation.ToCamelCase(this.operation.Rename(args.Path, args.Name, args.NewName)));
            }
            return(null);
        }
Exemplo n.º 3
0
        public void SaveFile(SaveServerFileViewModel request)
        {
            var    file           = request.File;
            Guid?  id             = request.Id;
            string path           = request.StoragePath;
            Guid?  organizationId = organizationManager.GetDefaultOrganization().Id;
            var    hash           = GetHash(path);

            //add FileAttribute entities
            var attributes = new Dictionary <string, int>()
            {
                { FileAttributes.StorageCount.ToString(), 1 },
                { FileAttributes.RetrievalCount.ToString(), 0 },
                { FileAttributes.AppendCount.ToString(), 0 }
            };

            List <FileAttribute> fileAttributes = new List <FileAttribute>();

            foreach (var attribute in attributes)
            {
                var fileAttribute = new FileAttribute()
                {
                    ServerFileId   = request.Id,
                    AttributeValue = attribute.Value,
                    CreatedBy      = httpContextAccessor.HttpContext.User.Identity.Name,
                    CreatedOn      = DateTime.UtcNow,
                    DataType       = attribute.Value.GetType().ToString(),
                    Name           = attribute.Key,
                    OrganizationId = organizationId
                };
                fileAttributeRepository.Add(fileAttribute);
                fileAttributes.Add(fileAttribute);
            }

            //add file properties to ServerFile entity
            var serverFile = new ServerFile()
            {
                Id                  = id,
                ContentType         = file.ContentType,
                CorrelationEntity   = request.CorrelationEntity,
                CorrelationEntityId = request.CorrelationEntityId,
                CreatedBy           = httpContextAccessor.HttpContext.User.Identity.Name,
                CreatedOn           = DateTime.UtcNow,
                HashCode            = hash,
                Name                = file.FileName,
                SizeInBytes         = file.Length,
                StorageFolderId     = request.StorageFolderId,
                StoragePath         = path,
                StorageProvider     = request.StorageProvider,
                OrganizationId      = organizationId,
                FileAttributes      = fileAttributes
            };

            serverFileRepository.Add(serverFile);
            webhookPublisher.PublishAsync("Files.NewFileCreated", serverFile.Id.ToString(), serverFile.Name);

            //upload file to local server
            //CheckDirectoryExists(path, organizationId);

            //if (file.Length <= 0 || file.Equals(null)) throw new Exception("No file exists");
            //if (file.Length > 0)
            //{
            //    path = Path.Combine(path, serverFile.Id.ToString());
            //    using (var stream = new FileStream(path, FileMode.Create))
            //        file.CopyTo(stream);

            //    ConvertToBinaryObject(path);
            //}
        }