Heim  >  Artikel  >  Backend-Entwicklung  >  .Net Core-Implementierungsbeispiel für das Herunterladen von Dateien

.Net Core-Implementierungsbeispiel für das Herunterladen von Dateien

黄舟
黄舟Original
2018-05-15 15:28:197289Durchsuche

In diesem Artikel wird die .NetCore-Downloaddatei mit Ihnen geteilt. Es gibt zwei gängige Downloads: Das A-Tag verweist direkt auf die Download-Dateiadresse und den Post- oder Get-Request-Hintergrundausgabedateistream. Dieser Artikel konzentriert sich auch auf diese beiden Kommen Sie und teilen Sie es mit. Wenn es für Sie hilfreich ist, unterstützen Sie es bitte.

  • Ermöglicht Websites das Herunterladen von Dateien ohne Erkennung des Inhaltstyps (d. h. Herunterladen ohne MIME-Typ-Einschränkungen)

  • So erlauben Sie das Herunterladen von Dateien mit den Suffixen .nupkg und .apk

  • Beispiel für eine Razor-Vorlage nach dem Herunterladen einer Datei

  • Einige Gedanken und Ängste zur Verwendung von NetCore in den letzten sechs Monaten

Erlauben Sie Websites, Dateien herunterzuladen, ohne den Inhaltstyp zu erkennen (z. B. Download). (ohne MIME-Typ-Einschränkungen)

Für Netcore-Webprojekte gibt es einige integrierte Inhaltstyp-Dateitypen, die das Herunterladen ermöglichen. Wir werden ein normales Razorweb-Projekt verwenden, um uns das Beispiel des direkten Herunterladens von Excel anzusehen Erstellen Sie zunächst im wwwroot-Verzeichnis des Projekts einen BAK-Ordner und speichern Sie dann die folgenden Dateien in diesem Verzeichnis:

Nach bestandenem Test nur noch Excel .xls-Dateien können direkt heruntergeladen werden, und die anderen sind alle 404:

Wenn Sie Dateien mit Suffixen wie .apk, .nupkg.cs usw. möchten . Um nicht eingeschränkt zu werden , können wir public static IApplicationBuilder UseStaticFiles(diese IApplicationBuilder-App, StaticFileOptions-Optionen); Erweiterung übergeben Zum Festlegen müssen wir ihn nur in den folgenden Code ändern:

            app.UseStaticFiles(new StaticFileOptions
            {                //设置不限制content-type
                ServeUnknownFileTypes = true 
            });

Dann starten Sie den Vorgang neu. Zu diesem Zeitpunkt können wir erneut auf diese Dateien zugreifen und sie herunterladen (Beachten Sie, dass Sie Dateien herunterladen können mit einem beliebigen Suffix zu diesem Zeitpunkt), wie im Screenshot unten gezeigt:

Was den Inhalt von Dateien mit dem Suffix cs betrifft, die direkt im Google-Browser angezeigt werden Wenn Sie interessiert sind, können Sie es versuchen.

Wie kann ich Dateien mit den Endungen .nupkg und .apk zulassen? Durch das obige Beispiel können wir ServeUnknownFileTypes =

true

; verwenden, um unbegrenzte Download-Dateitypen direkt festzulegen. Dies ist normalerweise nicht sehr gut oder nicht erlaubt, oder es wird nicht oft gesagt Seien Sie unsicher. Wenn wir nur den Download von Dateien mit dem Suffix .nupkg und .apk hinzufügen müssen, können wir den MIME-Typ über den folgenden Code hinzufügen, z. B.: Ebenso können auch Dateien mit den Suffixen Excel, APK und Nupkg heruntergeladen werden:

app.UseStaticFiles(new StaticFileOptions
            {                //ServeUnknownFileTypes = true 
                ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
                {
                    { ".apk","application/vnd.android.package-archive"},
                    { ".nupkg","application/zip"}
                })
            });

Aber dieses Mal besuchen wir http:

//

localhost:1120/bak/Startup.cs Sie können den heruntergeladenen Inhalt nicht erhalten:

Weil wir den Erweiterungstyp nicht hinzugefügt haben In der .cs-Datei gibt das System direkt 404 an den Konstruktor des FileExtentTypeProvider

-Objekts zurück, um dem Projekt mitzuteilen, was die heruntergeladene Inhaltstypdatei ist >

Beispiel für eine Razor-Vorlage zum Herunterladen einer DateiUm ehrlich zu sein, werde ich die Razor-Vorlage studieren, wenn ich in letzter Zeit Zeit habe. Im Folgenden werden wir ihren Beitrag durchgehen. Eine Methode, um das Backend anzufordern, Dateien über a herunterzuladen Formular; der Code für die login.cshtml-Datei ist direkt unten angegeben:

Es ist erwähnenswert, dass Razor

asp-page-handler=

Um die Anforderungsmethode auszuführen Schauen wir uns im Backend an, wie der endgültige HTML-Code aussieht, den sie generiert:
@page
@model LoginModel
@{}<form method="post">
    <button type="submit" asp-page-handler="down" class="btn">下载</button>
    <button type="submit" asp-page-handler="down01" class="btn">下载01</button>
    <button type="submit" asp-page-handler="down02" class="btn">下载02</button>
</form>

Es ist ersichtlich, dass dies hauptsächlich durch den

Handler geschieht wird als Parametername verwendet, um die Backend-Methode der Anfrage zu übergeben. Schauen wir uns an, wie der Backend-Code geschrieben ist (um das Herunterladen von Dateien zu erleichtern, nehme ich love.apk als Beispiel):

Die drei Post-Akzeptanzmethoden im Backend verwenden alle FileStreamResult

, um Download-Dateien auszugeben. Der Unterschied liegt in den unterschiedlichen Dateiquellen.
/// <summary>
        /// 虚拟文件地址输出下载        
        /// </summary>
        /// <returns></returns>
        public IActionResult OnPostDown()
        {            
        var addrUrl = "/bak/love.apk";            
        return File(addrUrl, "application/vnd.android.package-archive", Path.GetFileName(addrUrl));
        }        
        /// <summary>
        /// 文件流的方式输出        /// </summary>
        /// <returns></returns>
        public IActionResult OnPostDown01()
        {            
        var addrUrl = @"D:\F\学习\vs2017\netcore\Study.AspNetCore\WebApp02-1\wwwroot\bak\love.apk";            
        var stream = System.IO.File.OpenRead(addrUrl);            
        return File(stream, "application/vnd.android.package-archive", Path.GetFileName(addrUrl));
        }        
        /// <summary>
        /// 通过HttpClient获取另外站点的文件流,再输出        
        /// </summary>
        /// <returns></returns>
        public async Task<IActionResult> OnPostDown02()
        {            var path = "https://files.cnblogs.com/files/wangrudong003/%E7%89%B9%E4%BB%B701.gif";
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(path);            
            var stream = await client.GetStreamAsync(path);            
            return File(stream, "application/vnd.android.package-archive", Path.GetFileName(path));
        }

Bei einfacheren Websites sind Download-Dateien im Allgemeinen vorhanden Das Site-Verzeichnis ähnelt in gewisser Weise meinem wwwroot/bak-Verzeichnis, sodass es über das Site-Virtual-Verzeichnis heruntergeladen werden kann. Dies ist unsere erste Download-Methode. Einige Sites existieren im Allgemeinen aus Gründen der Dateisicherheit dieselbe Serverfestplatte der Website, daher müssen Sie den Dateistream über die zweite Methode hier abrufen und ihn dann an File(

) übergeben

Die letzte Methode besteht darin, die Dateien auf Ihre eigenen anderen Websites oder die Websites anderer Personen zu übertragen und sie als Ihre eigenen Dateien auszugeben. Diese Methode wird oft auch als eine der Hotlinking-Methoden bezeichnet;

Für den handler-Parameter von Razor ist zu beachten, dass er dem xxx-Namen in der OnGetxxx- oder OnPostxxx-Methode unseres Backend-Codes entspricht. Dies ist eine Razor-Anforderungsspezifikation und muss befolgt werden. Oh.

Einige Gedanken und Ängste zur Verwendung von NetCore in den letzten sechs Monaten

Reflexionen:

Derzeit ist die neueste Version von Netcore 2.0 und die API ist sehr leistungsstark . Nur ein paar Projekte, die ich bisher gemacht habe. Die API-Unterstützung ist mir schon einmal begegnet, und jemand hat mich gefragt, ob es eine API zur Verarbeitung von Bildern gibt Die Nuget-Paket-Community unterstützt die Bildverarbeitung. Sie können einen Blick auf https://www.nuget.org/packages werfen. Nach einigen Projekten bin ich der festen Überzeugung, dass die Lernkosten für Netcore tatsächlich nicht hoch sind Was das MVC-Projekt von Netcore betrifft, solange Sie das MVC-Framework bereits kennen, oder es sich um ein Webformular handelt (ich persönlich bin der Meinung, dass es Razor entspricht), können wir es einigen Freunden empfehlen, die es wagen Probieren Sie Netcore 2.0 nicht aus, oder diejenigen, die denken, dass es viel kosten wird, es zu erlernen, können es versuchen Viele Freunde haben viele verwandte Artikel und Git-Projekte im Blog-Park geteilt, aber sie haben in drei Netqq-Gruppen auf Probleme geantwortet, die den Leuten natürlich Sorgen bereiten Große Namen oder einige Leute auf der technischen Entscheidungsebene des Unternehmens achten ebenfalls darauf und beginnen, dies zu nutzen, um neue Projekte zu starten. Es gibt viele Start-up-Unternehmen in Peking, die Netcore als solche nutzen Ausgangspunkt für ihre unternehmerischen Projekte, daher hoffe ich, dass Freunde oder Führungskräfte, die noch am Rande warten, aktiv werden und zusammenarbeiten, um die Entwicklung der Gemeinschaft voranzutreiben.

Das obige ist der detaillierte Inhalt von.Net Core-Implementierungsbeispiel für das Herunterladen von Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn