private string ConsolidateFile(ResumableConfiguration configuration) { var path = GetFilePath(configuration); using (var destStream = File.Create(path, 15000)) { for (int chunkNumber = 1; chunkNumber <= configuration.Chunks; chunkNumber++) { var chunkFileName = GetChunkFileName(chunkNumber, configuration.Identifier); using (var sourceStream = File.OpenRead(chunkFileName)) { sourceStream.CopyTo(destStream); } } destStream.Close(); } return path; }
private void DeleteChunks(ResumableConfiguration configuration) { for (int chunkNumber = 1; chunkNumber <= configuration.Chunks; chunkNumber++) { var chunkFileName = GetChunkFileName(chunkNumber, configuration.Identifier); File.Delete(chunkFileName); } }
private bool AllChunksAreHere(ResumableConfiguration configuration) { for (int chunkNumber = 1; chunkNumber <= configuration.Chunks; chunkNumber++) if (!ChunkIsHere(chunkNumber, configuration.Identifier)) return false; return true; }
private void TryAssembleFile(ResumableConfiguration configuration) { if (AllChunksAreHere(configuration)) { // Create a single file var path = ConsolidateFile(configuration); // Rename consolidated with original name of upload RenameFile(path, Path.Combine(root, configuration.FileName)); // Delete chunk files DeleteChunks(configuration); } }
private string GetFilePath(ResumableConfiguration configuration) { return Path.Combine(root, configuration.Identifier); }