Feedback

C# - Asynchroner Download von Dateien

Veröffentlicht von am 03.11.2015
(0 Bewertungen)
Lädt ein File asynchron von einer Url herunter.
Ihr müsst die Url kennen und Client.

Als Ergebnis erhaltet ihr einen Stream.
GFU-Schulungen  [Anzeige]

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

XML und .NET Überblick

Um auf dem neuesten Wissensstand zu sein, sollten Sie unser aktuelles ASP .NET Komplett Seminar belegen.
Nach dem Seminar kennen Sie die wichtigsten Strömungen in der Software-Technologie

public static async Task<Stream> DownloadFileAsync(this HttpClient client, string url, CancellationToken token, IProgress<double> progress = null)
        {
            var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, token);

            if (!response.IsSuccessStatusCode)
            {
                throw new Exception(string.Format("The request returned with HTTP status code {0}", response.StatusCode));
            }

            var length = response.Content.Headers.ContentLength.HasValue ? response.Content.Headers.ContentLength.Value : -1L;

            using (var stream = await response.Content.ReadAsStreamAsync())
            {
                MemoryStream memoryStream = null;

                bool nolength = (length == -1);

                int size = ((nolength) ? 8192 : (int)length);

                if (nolength)
                    memoryStream = new MemoryStream();

                long total = 0;
                int nread = 0;
                int offset = 0;

                byte[] buffer = new byte[size];

                token.ThrowIfCancellationRequested();

                while ((nread = await stream.ReadAsync(buffer, offset, size, token)) != 0)
                {
                    if (nolength)
                    {
                        memoryStream.Write(buffer, 0, nread);
                    }
                    else
                    {
                        offset += nread;
                        size -= nread;
                    }
                    total += nread;

                    if (progress != null)
                        progress.Report((double)offset);

                    token.ThrowIfCancellationRequested();
                }

                return nolength ? memoryStream : new MemoryStream(buffer);
            }
Abgelegt unter HttpClient, Async, Download, Files.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!