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]

Angular mit ASP.NET Core für .NET-Entwickler

.NET ist Ihnen vertraut, als Entwickler verfügen Sie über einschlägige Kenntnisse. In diesem Kurs lernen Sie nun, Angular in .NET-Umgebungen einzusetzen. Sie verstehen das Konzept von Angular und integrieren das clientseitige JS-Framework sicher in.NET-Anwendungen.

ASP.NET Core - Der Einstieg

In nur 3 Tagen lernen Sie, wie man mit ASP.NET Core und den Technologien MVC, Entity Framework, WebAPI und Razor professionelle Web-Anwendungs-Architekturen aufbaut. Diese Schulung ist der perfekte Einstieg, um datengetriebene und präsentations-orientierte Applikationen auf Basis der ASP.NET Core Plattform zu erstellen.

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!