private async void FileDownloadSuccessful(object sender, FileDownloadResultEventArgs e) { CurrentShownFiles[e.ID].progress_Download.Visible = false; CurrentShownFiles[e.ID].panel_CheckMark.Visible = true; CurrentShownFiles[e.ID].panel_CheckMark.Invalidate(); CurrentShownFiles[e.ID].CurrentState = FileStatus.Finished; if (check_DeleteAfterDownload.Checked) { if (CurrentShownFiles[e.ID].CurrentState != FileStatus.Deleted) { bool success = await ApiCommunication.DeleteFileRequest(CurrentShownFiles[e.ID].FileStructOnline.FullName, UserSettings.UserAccessToken, e.ID); } } DownloadNextFile(); }
public async static Task <bool> DownloadFile(string fileName, int id, string authToken) { string tempfile = Path.Combine(Constants.API_FILE_DOWNLOAD_FOLDER, fileName); var request = new HttpRequestMessage(HttpMethod.Get, Constants.API_FILEHOST_GET_FILE); request.Headers.Add("File-Name", fileName); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authToken); HttpResponseMessage response = await ApiClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); if (response.StatusCode != HttpStatusCode.OK) { // Something wrong FileDownloadResultEventArgs result_args = new FileDownloadResultEventArgs(); result_args.Successful = false; result_args.FileName = fileName; result_args.Reason = response.ReasonPhrase; FileDownloadFailure?.Invoke(null, result_args); return(false); } var totalBytes = 0L; if (response.Headers.Contains("File-Size")) { totalBytes = Convert.ToInt64(response.Headers.GetValues("File-Size").FirstOrDefault()); } Stream contentStream = await response.Content.ReadAsStreamAsync(); FileStream fileStream = new FileStream(tempfile, FileMode.Create, FileAccess.Write, FileShare.None, 8192, true); var totalRead = 0L; var totalReads = 0L; var buffer = new byte[8192]; var isMoreToRead = true; do { var read = await contentStream.ReadAsync(buffer, 0, buffer.Length); if (read == 0) { isMoreToRead = false; } else { await fileStream.WriteAsync(buffer, 0, read); totalRead += read; totalReads += 1; if (totalReads % 2000 == 0) { FileTransferProgressEventArgs progress_args = new FileTransferProgressEventArgs(); progress_args.FileName = fileName; progress_args.ID = id; decimal pp = (decimal)totalRead / (decimal)totalBytes; progress_args.PercentProgress = (int)Math.Round(pp * 100); FileDownloadProgress?.Invoke(null, progress_args); //Console.WriteLine(string.Format("total bytes downloaded so far: {0:n0}", totalRead)); } } }while (isMoreToRead); FileDownloadResultEventArgs args = new FileDownloadResultEventArgs(); args.Successful = true; args.FileName = fileName; args.ID = id; FileDownloadSuccessful?.Invoke(null, args); return(true); }