// constructors public GridFSSeekableDownloadStream( GridFSBucket bucket, IReadBinding binding, GridFSFileInfo fileInfo) : base(bucket, binding, fileInfo) { }
// constructors protected GridFSDownloadStreamBase( GridFSBucket bucket, IReadBinding binding, GridFSFileInfo fileInfo) { _bucket = bucket; _binding = binding; _fileInfo = fileInfo; }
private void DownloadToStreamHelper(IReadBindingHandle binding, GridFSFileInfo <TFileId> fileInfo, Stream destination, GridFSDownloadOptions options, CancellationToken cancellationToken = default(CancellationToken)) { var checkMD5 = options.CheckMD5 ?? false; using (var source = new GridFSForwardOnlyDownloadStream <TFileId>(this, binding.Fork(), fileInfo, checkMD5)) { var count = source.Length; var buffer = new byte[fileInfo.ChunkSizeBytes]; while (count > 0) { var partialCount = (int)Math.Min(buffer.Length, count); source.ReadBytes(buffer, 0, partialCount, cancellationToken); //((Stream)source).ReadBytes(buffer, 0, partialCount, cancellationToken); destination.Write(buffer, 0, partialCount); count -= partialCount; } } }
// constructors public GridFSForwardOnlyDownloadStream( GridFSBucket bucket, IReadBinding binding, GridFSFileInfo fileInfo, bool checkMD5) : base(bucket, binding, fileInfo) { _checkMD5 = checkMD5; if (_checkMD5) { _md5 = MD5.Create(); } _lastChunkNumber = (int)((fileInfo.Length - 1) / fileInfo.ChunkSizeBytes); _lastChunkSize = (int)(fileInfo.Length % fileInfo.ChunkSizeBytes); if (_lastChunkSize == 0) { _lastChunkSize = fileInfo.ChunkSizeBytes; } }
private async Task DownloadToStreamHelperAsync(IReadBindingHandle binding, GridFSFileInfo <TFileId> fileInfo, Stream destination, GridFSDownloadOptions options, CancellationToken cancellationToken = default(CancellationToken)) { var checkMD5 = options.CheckMD5 ?? false; using (var source = new GridFSForwardOnlyDownloadStream <TFileId>(this, binding.Fork(), fileInfo, checkMD5)) { var count = source.Length; var buffer = new byte[fileInfo.ChunkSizeBytes]; while (count > 0) { var partialCount = (int)Math.Min(buffer.Length, count); await source.ReadBytesAsync(buffer, 0, partialCount, cancellationToken).ConfigureAwait(false); await destination.WriteAsync(buffer, 0, partialCount, cancellationToken).ConfigureAwait(false); count -= partialCount; } await source.CloseAsync(cancellationToken).ConfigureAwait(false); } }
private async Task DownloadToStreamHelperAsync(IReadBindingHandle binding, GridFSFileInfo fileInfo, Stream destination, GridFSDownloadOptions options, CancellationToken cancellationToken = default(CancellationToken)) { var checkMD5 = options.CheckMD5 ?? false; using (var source = new GridFSForwardOnlyDownloadStream(this, binding.Fork(), fileInfo, checkMD5)) { var count = source.Length; var buffer = new byte[fileInfo.ChunkSizeBytes]; while (count > 0) { var partialCount = (int)Math.Min(buffer.Length, count); await source.ReadBytesAsync(buffer, 0, partialCount, cancellationToken).ConfigureAwait(false); await destination.WriteAsync(buffer, 0, partialCount, cancellationToken).ConfigureAwait(false); count -= partialCount; } await source.CloseAsync(cancellationToken).ConfigureAwait(false); } }
private async Task<byte[]> DownloadAsBytesHelperAsync(IReadBindingHandle binding, GridFSFileInfo fileInfo, GridFSDownloadOptions options, CancellationToken cancellationToken = default(CancellationToken)) { if (fileInfo.Length > int.MaxValue) { throw new NotSupportedException("GridFS stored file is too large to be returned as a byte array."); } using (var destination = new MemoryStream((int)fileInfo.Length)) { await DownloadToStreamHelperAsync(binding, fileInfo, destination, options, cancellationToken).ConfigureAwait(false); return destination.GetBuffer(); } }
private GridFSDownloadStream CreateDownloadStream(IReadBindingHandle binding, GridFSFileInfo fileInfo, GridFSDownloadOptions options, CancellationToken cancellationToken = default(CancellationToken)) { var checkMD5 = options.CheckMD5 ?? false; var seekable = options.Seekable ?? false; if (checkMD5 && seekable) { throw new ArgumentException("CheckMD5 can only be used when Seekable is false."); } if (seekable) { return new GridFSSeekableDownloadStream(this, binding, fileInfo); } else { return new GridFSForwardOnlyDownloadStream(this, binding, fileInfo, checkMD5); } }
private async Task <byte[]> DownloadAsBytesHelperAsync(IReadBindingHandle binding, GridFSFileInfo <TFileId> fileInfo, GridFSDownloadOptions options, CancellationToken cancellationToken = default(CancellationToken)) { if (fileInfo.Length > int.MaxValue) { throw new NotSupportedException("GridFS stored file is too large to be returned as a byte array."); } var bytes = new byte[(int)fileInfo.Length]; using (var destination = new MemoryStream(bytes)) { await DownloadToStreamHelperAsync(binding, fileInfo, destination, options, cancellationToken).ConfigureAwait(false); return(bytes); } }
private GridFSDownloadStream <TFileId> CreateDownloadStream(IReadBindingHandle binding, GridFSFileInfo <TFileId> fileInfo, GridFSDownloadOptions options, CancellationToken cancellationToken = default(CancellationToken)) { var checkMD5 = options.CheckMD5 ?? false; var seekable = options.Seekable ?? false; if (checkMD5 && seekable) { throw new ArgumentException("CheckMD5 can only be used when Seekable is false."); } if (seekable) { return(new GridFSSeekableDownloadStream <TFileId>(this, binding, fileInfo)); } else { return(new GridFSForwardOnlyDownloadStream <TFileId>(this, binding, fileInfo, checkMD5)); } }
private void DownloadToStreamHelper(IReadBindingHandle binding, GridFSFileInfo fileInfo, Stream destination, GridFSDownloadOptions options, CancellationToken cancellationToken = default(CancellationToken)) { var checkMD5 = options.CheckMD5 ?? false; using (var source = new GridFSForwardOnlyDownloadStream(this, binding.Fork(), fileInfo, checkMD5)) { var count = source.Length; var buffer = new byte[fileInfo.ChunkSizeBytes]; while (count > 0) { var partialCount = (int)Math.Min(buffer.Length, count); source.ReadBytes(buffer, 0, partialCount, cancellationToken); //((Stream)source).ReadBytes(buffer, 0, partialCount, cancellationToken); destination.Write(buffer, 0, partialCount); count -= partialCount; } } }