private async Task ZipAllFilesToStream( Release release, Stream outputStream, CancellationToken?cancellationToken = null) { var releaseFiles = (await QueryReleaseFiles(release.Id).ToListAsync()) .OrderBy(rf => rf.File.ZipFileEntryName()) .ToList(); var path = Path.GetTempPath() + release.AllFilesZipFileName(); var fileStream = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite); await using var multiWriteStream = new MultiWriteStream(outputStream, fileStream); await DoZipFilesToStream(releaseFiles, release, multiWriteStream, cancellationToken); await multiWriteStream.FlushAsync(); // Now cache the All files zip into blob storage // so that we can quickly fetch it again. fileStream.Position = 0; await _blobStorageService.UploadStream( containerName : PublicReleaseFiles, path : release.AllFilesZipPath(), stream : fileStream, contentType : MediaTypeNames.Application.Zip ); await fileStream.DisposeAsync(); File.Delete(path); }
public async Task Position_Throws() { await using var stream1 = new MemoryStream(); await using var stream2 = new MemoryStream(); var multiWriteStream = new MultiWriteStream(stream1, stream2); Assert.Throws <NotSupportedException>(() => { multiWriteStream.Position = 0; }); }
public async Task Seek_Throws() { await using var stream1 = new MemoryStream(); await using var stream2 = new MemoryStream(); var multiWriteStream = new MultiWriteStream(stream1, stream2); Assert.Throws <NotSupportedException>(() => multiWriteStream.Seek(0, SeekOrigin.Begin)); }
public async Task Read_Throws() { await using var stream1 = new MemoryStream(); await using var stream2 = new MemoryStream(); var multiWriteStream = new MultiWriteStream(stream1, stream2); var buffer = new byte[] {}; Assert.Throws <NotSupportedException>(() => multiWriteStream.Read(buffer, 0, 0)); }
public async Task Write() { await using var stream1 = new MemoryStream(); await using var stream2 = new MemoryStream(); var multiWriteStream = new MultiWriteStream(stream1, stream2); multiWriteStream.WriteText("Test text"); stream1.Position = 0; stream2.Position = 0; Assert.Equal("Test text", stream1.ReadToEnd()); Assert.Equal("Test text", stream2.ReadToEnd()); }