private Buffer LoadBuffer(long position) { bool isLast = false; if (position + bufferSize >= Length) { position = Math.Max(0, Length - bufferSize); isLast = true; } var range = new CloudStorageResourceRange(position, Math.Min(bufferSize, Length - position)); Console.WriteLine($"Seekable stream requesting byte range at {range.Offset} length {range.Length}"); var objReq = Task.Run(() => { return(_CloudStorage.GetObjectStreamAsync(_ResourceName, range)); }).Result; var ms = new MemoryStream((int)range.Length); objReq.CopyTo(ms); return(new Buffer() { Position = position, Data = ms, BytesAvail = ms.Length, IsLast = isLast }); }
public async Task <Stream> OpenAsync() { var range = new CloudStorageResourceRange(OffsetOfCompressedData, CompressedLength); Console.WriteLine($"Cloud zip archive entry requesting byte range at {range.Offset} length {range.Length}"); var resp = await _CloudStorage.GetObjectStreamAsync(_ResourceName, range); return(GetDataDecompressor(resp)); }
/// <summary> /// Get Object /// </summary> /// <param name="resource"></param> /// <param name="range">(optional)</param> /// <returns></returns> public async Task <Stream> GetObjectStreamAsync( ICloudStorageResourceName resource, CloudStorageResourceRange range = null) { Stream stream = null; if (resource is S3CloudStorageResourceName s3resource) { var req = new GetObjectRequest { BucketName = s3resource.Name, Key = s3resource.ObjectKey }; if (range != null) { req.ByteRange = new ByteRange(range.Offset, range.Offset + range.Length - 1); } var objectResponse = await S3Client.GetObjectAsync(req); stream = objectResponse.ResponseStream; } return(stream); }