From fc4cee1a3a70f8d86a9b655811a6397032d5f32f Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Sun, 11 Dec 2022 20:42:50 +0100 Subject: [PATCH] delete empty files on failed downloads --- .../WebAPI/ApIController.Functions.Files.cs | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/MareSynchronos/WebAPI/ApIController.Functions.Files.cs b/MareSynchronos/WebAPI/ApIController.Functions.Files.cs index 971d60d..e758f63 100644 --- a/MareSynchronos/WebAPI/ApIController.Functions.Files.cs +++ b/MareSynchronos/WebAPI/ApIController.Functions.Files.cs @@ -50,23 +50,31 @@ public partial class ApiController response.EnsureSuccessStatusCode(); var fileName = Path.GetTempFileName(); - var fileStream = File.Create(fileName); - await using (fileStream.ConfigureAwait(false)) + try { - var bufferSize = response.Content.Headers.ContentLength > 1024 * 1024 ? 4096 : 1024; - var buffer = new byte[bufferSize]; - - var bytesRead = 0; - while ((bytesRead = await (await response.Content.ReadAsStreamAsync(ct).ConfigureAwait(false)).ReadAsync(buffer, ct).ConfigureAwait(false)) > 0) + var fileStream = File.Create(fileName); + await using (fileStream.ConfigureAwait(false)) { - ct.ThrowIfCancellationRequested(); + var bufferSize = response.Content.Headers.ContentLength > 1024 * 1024 ? 4096 : 1024; + var buffer = new byte[bufferSize]; - await fileStream.WriteAsync(buffer.AsMemory(0, bytesRead), ct).ConfigureAwait(false); + var bytesRead = 0; + while ((bytesRead = await (await response.Content.ReadAsStreamAsync(ct).ConfigureAwait(false)).ReadAsync(buffer, ct).ConfigureAwait(false)) > 0) + { + ct.ThrowIfCancellationRequested(); - progress.Report(bytesRead); + await fileStream.WriteAsync(buffer.AsMemory(0, bytesRead), ct).ConfigureAwait(false); + + progress.Report(bytesRead); + } + + return fileName; } - - return fileName; + } + catch + { + File.Delete(fileName); + throw; } }