Beispiel #1
0
        public Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken ct)
        {
            if (_isComplete)
            {
                throw new InvalidOperationException("Cannot write anymore to a completed stream");
            }

            _length += count;
            while (count > 0)
            {
                var toCopy = Math.Min(ReadWriteBufferSize - _currentOffset, count);
                Buffer.BlockCopy(buffer, offset, _buffer, _currentOffset, toCopy);

                offset         += toCopy;
                count          -= toCopy;
                _currentOffset += toCopy;

                if (_currentOffset == ReadWriteBufferSize)
                {
                    if (_uploader == null)
                    {
                        _uploader = new AmazonMultiUpload(_client, _bucket, _key, _metadata, ct);
                    }

                    _uploader.PushBlockOfData(_buffer, _partNumber);
                    _partNumber++;

                    _buffer        = new byte[ReadWriteBufferSize];
                    _currentOffset = 0;
                }
            }
            return(Task.FromResult(0));
        }