public CloudStorageSeekableStream(ICloudStorage storage, ICloudStorageResourceName resourceName)
        {
            _CloudStorage = storage;
            _ResourceName = resourceName;

            Length = Task.Run(() => { return(_CloudStorage.GetObjectLengthAsync(_ResourceName)); }).Result;
        }
        internal CloudZipArchiveEntry(ICloudStorage storage, ICloudStorageResourceName resourceName, ZipArchiveEntry entry)
            : base(entry)
        {
            _CloudStorage = storage;
            _ResourceName = resourceName;

            CompressionMethod      = (ushort)methodProperty.GetValue(entry);
            OffsetOfCompressedData = (long)offsetProperty.GetValue(entry);
        }
        public CloudZipArchive(ICloudStorage storage, ICloudStorageResourceName resourceName)
        {
            _CloudStorage = storage;
            _ResourceName = resourceName;

            _stream = new CloudStorageSeekableStream(_CloudStorage, _ResourceName);

            _Archive = new ZipArchive(_stream);
        }
示例#4
0
        public async Task <long> GetObjectLengthAsync(ICloudStorageResourceName resource)
        {
            if (resource is S3CloudStorageResourceName s3resource)
            {
                var metadata = await S3Client.GetObjectMetadataAsync(s3resource.Name, s3resource.ObjectKey);

                return(metadata.ContentLength);
            }

            return(-1);
        }
示例#5
0
        /// <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);
        }