コード例 #1
0
        public async Task AddFile(AddFileDto fileDto, int userId, int clientId)
        {
            var fileStorageRepository = DataContextManager.CreateRepository <IFileStorageRepository>();

            var parentFileStorage = await fileStorageRepository.GetById(fileDto.ParentId, userId, clientId);

            if (parentFileStorage == null || !parentFileStorage.IsDirectory)
            {
                throw new NotFoundException("File storage", fileDto.ParentId);
            }

            var fileName      = Path.GetFileNameWithoutExtension(fileDto.Name);
            var fileExtension = Path.GetExtension(fileDto.Name);

            var childFileStorages = await fileStorageRepository.GetByParentId(parentFileStorage.Id, userId, clientId);

            if (childFileStorages.Any(x => !x.IsDirectory && x.Name.Equals(fileName) &&
                                      x.Files.Any(y => y.IsActive && y.Extension.Equals(fileExtension))))
            {
                throw new FoundSameObjectException("File storage", fileName);
            }

            var owners = await _permissionHelper.GetOwners(parentFileStorage, userId, clientId);

            var sizeInfo = fileDto.Size.ToPrettySize();
            var blobName = Guid.NewGuid();

            var newFileStorage = new FileStorage
            {
                Name = fileName,
                ParentFileStorageId = parentFileStorage.Id,
                IsDirectory         = false,
                CreateDate          = DateTime.UtcNow,
                CreateById          = userId,
                ClientId            = owners.ClientId,
                OwnerId             = owners.OwnerId,
                IsActive            = true,
                Files = new List <Models.File>
                {
                    new Models.File
                    {
                        Extension        = fileExtension,
                        Size             = sizeInfo.Size,
                        SizeType         = sizeInfo.SizeType,
                        IsActive         = true,
                        CreateById       = userId,
                        CreateDate       = DateTime.UtcNow,
                        AzureBlobStorage = new AzureBlobStorage
                        {
                            BlobName = blobName
                        }
                    }
                }
            };

            await _azureBlobClient.UploadFile(_blobSettings.ContainerName, blobName.ToString(), fileDto.Content.ToByteArray());

            await fileStorageRepository.Add(newFileStorage);
        }