public async Task <string> GetFiles(string docId) { var request = new ListObjectsV2Request { BucketName = s3.GetBucketName(), MaxKeys = 20, Prefix = docId }; var readAreas = securityContext.GetReadAreas().Select(i => i.ToLower()); var files = new List <S3FileDTO>(); var client = s3.GetClient(); ListObjectsV2Response response; do { response = await client.ListObjectsV2Async(request); foreach (var i in response.S3Objects) { foreach (var j in readAreas) { if (i.Key.ToLower().StartsWith(docId + "/" + j)) { var metadataRequest = new GetObjectMetadataRequest { BucketName = s3.GetBucketName(), Key = i.Key }; files.Add(new S3FileDTO { Path = i.Key, LastModified = i.LastModified.ToTimestamp(), Size = i.Size, // Now saved to metadata, would be better to save these to database, but so it is UserId = (await client.GetObjectMetadataAsync(metadataRequest)).Metadata["x-amz-meta-userid"] }); break; } } } request.ContinuationToken = response.NextContinuationToken; } while (response.IsTruncated); return(Jsoner.Convert(files)); }