예제 #1
0
        public async Task <PagedResultDto <OSSObjectDto> > GetAll(GetAllInput input)
        {
            var funTagNames = new List <string>();

            if (!input.SysFunName.IsNullOrEmpty())
            {
                var tags = await _sysFunTagRepository
                           .GetAll()
                           .Include(x => x.SysFun)
                           .Include(x => x.Tag)
                           .Where(x => x.SysFun.Name == input.SysFunName)
                           .Select(x => x.Tag.Name)
                           .ToListAsync();

                funTagNames.AddRange(tags);
            }

            if (input.Group.HasValue)
            {
                input.BucketName = _settingManager.GetSettingValue(AppSettingNames.OSS.ContextStore);
            }


            var thisBuckets = _bucketManage.GetBuckets().Select(x => x.Name).Distinct().ToList();

            var hiddenObjectAndSubs = await _aliyunOSSManage.GetHiddenObjects(thisBuckets).ToListAsync();

            IQueryable <OSSObject> q =
                _oSSObjectRepository
                .GetAll()
                .Include(x => x.ObjectTags)
                .Include("ObjectTags.Tag")
                .Where(x => x.Size > 0)
                .Where(x => thisBuckets.Contains(x.BucketName))
                .WhereIf(!input.BucketName.IsNullOrEmpty(), x => x.BucketName == input.BucketName)
                .WhereIf(!input.Name.IsNullOrEmpty(), x => x.Name.Contains(input.Name))
                .WhereIf(input.Group.HasValue, x => x.Key.Contains("" + input.Group))
                .WhereIf(input.TagNames != null && input.TagNames.Count > 0, x => x.ObjectTags.Select(o => o.Tag.Name.ToLower()).Intersect(input.TagNames.Select(t => t.ToLower())).Any())
                .WhereIf(input.ExtensionNames != null && input.ExtensionNames.Length > 0, x => input.ExtensionNames.Select(t => t.ToLower()).Any(e => x.ExtensionName.ToLower().Contains(e)))
                .WhereIf(!input.SysFunName.IsNullOrEmpty(), x => x.ObjectTags.Select(o => o.Tag.Name).Intersect(funTagNames).Any())
                .WhereIf(!input.Group.HasValue, x => !hiddenObjectAndSubs.Contains(x.Id)) // 不显示隐藏文件
                .GroupBy(x => x.ETag)
                .Select(x => x.FirstOrDefault())
                .OrderBy(x => x.Id)
            ;
            var count = await q.CountAsync();

            q = q.PageBy(input.SkipCount, input.MaxResultCount);

            var data = await q.ToListAsync();

            var dataR = data
                        .Select(x => _aliyunOSSManage.OssObjectToOSSObjectDto(x))
                        .ToList();

            _unitOfWorkManager.Current.SaveChanges();
            return(new PagedResultDto <OSSObjectDto>(count, dataR));
        }
예제 #2
0
        public async Task <List <OSSObjectDto> > Search(SearchInput input)
        {
            var root = input.Root ?? "";
            var q    = _oSSObjectRepository
                       .GetAll()
                       .Where(x => x.BucketName == input.BucketName)
                       .WhereIf(!(root.IsNullOrEmpty() || root == "/"), x => x.Key.StartsWith(root))
                       .WhereIf(!input.Name.IsNullOrEmpty(), x => x.Name.Contains(input.Name))
                       .WhereIf(input.TagNames != null && input.TagNames.Length > 0, x => x.ObjectTags.Select(o => o.Tag.Name.ToLower()).Intersect(input.TagNames.Select(t => t.ToLower())).Any())
                       .WhereIf(input.ExtensionNames != null && input.ExtensionNames.Length > 0, x => input.ExtensionNames.Select(t => t.ToLower()).Any(e => x.ExtensionName.ToLower().Contains(e)))
                       .OrderBy(input.Sorting)
            ;

            var data = await q.ToListAsync();

            var dataR = data
                        .Select(x => _aliyunOSSManager.OssObjectToOSSObjectDto(x))
                        .ToList();

            return(dataR);
        }