Maison >développement back-end >Tutoriel C#.Net >Exemple d'implémentation .Net Core de téléchargement de fichiers

Exemple d'implémentation .Net Core de téléchargement de fichiers

黄舟
黄舟original
2018-05-15 15:28:197337parcourir

Cet article partagera avec vous le fichier de téléchargement .NetCore. Il existe deux téléchargements courants : la balise A pointe directement vers l'adresse du fichier de téléchargement et le flux du fichier de sortie en arrière-plan de la publication ou de la demande d'obtention. Cet article se concentrera également sur ces deux éléments. méthodes. Venez partager si cela vous est utile, merci de le soutenir.

  • Permet aux sites de télécharger des fichiers sans reconnaître le type de contenu (c'est-à-dire : téléchargement sans restrictions de type MIME)

  • Comment autoriser le téléchargement de fichiers avec les suffixes .nupkg et .apk

  • Exemple de fichier de post-téléchargement de modèle Razor

  • Quelques réflexions et inquiétudes concernant l'utilisation de NetCore au cours des six derniers mois

Autoriser les sites à télécharger des fichiers sans reconnaître le type de contenu (c'est-à-dire : télécharger sans restrictions de type MIME)

Pour les projets Web netcore, il existe certains types de fichiers de type contenu intégrés qui permettent le téléchargement ; nous utiliserons un projet razorweb ordinaire pour jeter un œil à l'exemple de téléchargement d'Excel directement via la connexion ; d'abord, dans le répertoire wwwroot du projet Créez un dossier bak, puis stockez les fichiers suivants dans ce répertoire :

Après avoir réussi le test, seul le fichier excel Le fichier .xls peut être téléchargé directement, et les autres sont tous au nombre de 404 :

Si vous voulez des fichiers avec des suffixes tels que .apk, .nupkg.cs etc . pour ne pas être restreint , nous pouvons passer public static IApplicationBuilder UseStaticFiles(cette application IApplicationBuilder, options StaticFileOptions); extension. pour définir, il suffit de le modifier avec le code suivant :

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

Ensuite, redémarrez l'opération. À ce moment, nous pouvons accéder et télécharger à nouveau ces fichiers (Notez que vous pouvez télécharger des fichiers. avec n'importe quel suffixe à ce moment), comme le montre la capture d'écran ci-dessous :

Quant au contenu des fichiers avec le suffixe cs qui sont affichés directement dans le navigateur Google , il n'y aura pas de photos ici. Si vous êtes intéressé, vous pouvez l'essayer

Comment l'autoriser ? Téléchargez des fichiers avec les suffixes .nupkg et .apk

Grâce à l'exemple ci-dessus, nous pouvons utiliser ServeUnknownFileTypes = true; pour définir directement des types de fichiers à télécharger illimités. Ce n'est généralement pas très bon ou n'est pas autorisé, ou ce n'est pas souvent dit. être dangereux ; si nous devons uniquement ajouter le téléchargement de fichiers avec .nupkg et le suffixe .apk , nous pouvons alors ajouter le type MIME via le code suivant, tel que :

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

De même, les fichiers avec le suffixe Excel, apk, nupkg peuvent également être téléchargés :

Mais cette fois, nous visitons http://localhost:1120/bak/Startup.cs Vous ne pouvez pas obtenir le contenu téléchargé :

Parce que nous n'avons pas ajouté le type d'extension à le fichier .cs, le système nous renvoie directement 404 ; ici, nous passons un type de mappage dic via le constructeur de l'objet FileExtensionContentTypeProvider pour indiquer au projet ce qui est autorisé pour le fichier de type de contenu téléchargé ; >

Exemple de fichier de téléchargement de modèle Razor

Pour être honnête, j'étudierai le modèle Razor lorsque j'aurai le temps récemment. Ci-dessous, nous passerons en revue son article Une méthode pour demander au backend de télécharger des fichiers via un. formulaire ; le code du fichier login.cshtml est donné directement ci-dessous :

@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>
Il est à noter ici que le rasoir passe

asp-page-handler=Pour exécuter la méthode de requête le backend, regardons à quoi ressemble le code html final qu'elle génère :

On peut voir que cela se fait principalement via le

gestionnaire est utilisé comme nom de paramètre pour transmettre la méthode backend de la requête. Voyons comment le code backend est écrit (afin de faciliter le téléchargement des fichiers, je prends love.apk comme exemple) :

/// <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));
        }
Les trois méthodes de post-acceptation sur le back-end utilisent toutes

FileStreamResult pour générer le fichier téléchargé. La différence réside dans les différentes sources des fichiers

Pour les sites plus simples, téléchargez les fichiers ; existent généralement sur le répertoire du site., qui est quelque peu similaire à mon répertoire wwwroot/bak, il peut donc être téléchargé via le répertoire virtuel du site, qui est notre première méthode de téléchargement

Certains sites existent généralement pour la sécurité des fichiers ; . sur le même disque serveur du site Web, vous devez donc obtenir le flux de fichiers via la deuxième méthode ici, puis le transmettre à File(

);

La dernière méthode consiste à transférer les fichiers sur vos propres sites ou sur les sites d'autres personnes et à les générer sous forme de vos propres fichiers. Cette méthode est aussi ce que les gens appellent souvent l'une des méthodes de hotlinking;

Pour le paramètre

handler de razor, il est à noter qu'il correspond au nom xxx dans la méthode OnGetxxx ou OnPostxxx de notre code backend. Il s'agit d'une spécification de requête de rasoir et doit être suivie. Oh.

Quelques réflexions et inquiétudes concernant l'utilisation de NetCore au cours des six derniers mois

Réflexions :

Pour l'instant, la dernière version de netcore est la 2.0 et son API est très puissante . Juste quelques projets que j'ai réalisés jusqu'à présent. À en juger par son utilisation, son support API est très bon ; je l'ai déjà rencontré et quelqu'un m'a demandé s'il existait une API pour le traitement des images. La réponse est oui. la communauté des packages nuget qui prend en charge le traitement d'images. Amis intéressés Vous pouvez jeter un œil à https://www.nuget.org/packages ; après avoir intercalé plusieurs projets, je pense profondément que le coût d'apprentissage du netcore n'est en fait pas élevé. En ce qui concerne le projet mvc de netcore, tant que vous connaissez le framework mvc auparavant, ou que c'est un webform (personnellement je pense que ça correspond à razor), donc c'est sans stress à utiliser ici nous recommandons à certains amis qui n'osent pas ; essayez netcore2.0 ou ceux qui pensent que cela coûtera cher à apprendre peuvent l'essayer

Anxiété :

Cela fait un moment que netcore 2.0 est sorti pendant cette période, bien que beaucoup. des amis ont partagé de nombreux articles et projets git connexes dans le parc de blogs ; mais ils ont répondu ou soulevé des problèmes rencontrés dans le développement de netcore dans trois groupes netqq, ce qui inquiète bien sûr les gens ; des noms ou des personnes au niveau décisionnel technique de l'entreprise y prêtent également attention et commencent à l'utiliser pour démarrer de nouveaux projets ; je ne connais pas d'autres villes. Il y a pas mal de start-up ici à Pékin qui utilisent le netcore. comme point de départ de leurs projets entrepreneuriaux, j'espère donc que des amis ou des dirigeants qui attendent encore sur la touche commenceront à agir et à travailler ensemble pour favoriser le développement de la communauté.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn