Maison développement back-end Tutoriel C#.Net Que savez-vous du téléchargement, de l'importation et de l'exportation d'ASP.NET Core MVC ?

Que savez-vous du téléchargement, de l'importation et de l'exportation d'ASP.NET Core MVC ?

Apr 29, 2017 pm 05:08 PM

Avant-propos

Je suis devenu un oiseau de nuit, donc dans cette section, nous parlerons du téléchargement dans ASP.NET Core MVC. J'ai étudié la fonction d'importation par lots au cours des deux derniers jours. Dans cette section, je parlerai brièvement de l'importation et de l'exportation. J'attendrai que le blogueur comprenne correctement, puis j'en discuterai avec vous et je partagerai.

Téléchargement .NET Core MVC

Jetons d’abord un coup d’œil à l’exemple de téléchargement sur le site officiel, puis effectuons une formation d’extension. Le formulaire sur le site officiel ressemble à ceci.

<form method="post" enctype="multipart/form-data" asp-controller="UploadFiles" asp-action="Index">
    <p class="form-group">
        <p class="col-md-10">
            <p>Upload one or more files using this form:</p>
            <input type="file" name="files" multiple />
        </p>
    </p>
    <p class="form-group">
        <p class="col-md-10">
            <input type="submit" value="上传" />
        </p>
    </p>
</form>
Copier après la connexion

Pour recevoir les fichiers téléchargés dans ASP.NET Core MVC, vous devez utiliser IFormFile pour les recevoir. L'interface est définie comme suit :

public interface IFormFile
{
    string ContentType { get; }
    string ContentDisposition { get; }
    IHeaderDictionary Headers { get; }
    long Length { get; }
    string Name { get; }
    string FileName { get; }
    Stream OpenReadStream();
    void CopyTo(Stream target);
    Task CopyToAsync(Stream target, CancellationToken cancellationToken = null);
}
Copier après la connexion

. Le contrôleur d'arrière-plan définit la méthode d'action téléchargée comme suit :

 [HttpPost("UploadFiles")]
  public async Task<IActionResult> Post(List<IFormFile> files)
  {
     long size = files.Sum(f => f.Length);

     // full path to file in temp location
     var filePath = Path.GetTempFileName();

     foreach (var formFile in files)
     {
       if (formFile.Length > 0)
       {
           using (var stream = new FileStream(filePath, FileMode.Create))
           {
              await formFile.CopyToAsync(stream);
           }
       }
     }
     return Ok(new { count = files.Count, size, filePath });
 }
Copier après la connexion

Afin d'indiquer clairement le répertoire où se trouvent les fichiers téléchargés, nous modifierons l'exemple du site officiel.

  public IActionResult UploadFiles(List<IFormFile> files)
  {
      long size = 0;
      foreach (var file in files)
      {
         //var fileName = file.FileName;
         var fileName = ContentDispositionHeaderValue
                         .Parse(file.ContentDisposition)
                         .FileName
                         .Trim(&#39;"&#39;);
          fileName = hostingEnv.WebRootPath + $@"\{fileName}";
          size += file.Length;
          using (FileStream fs = System.IO.File.Create(fileName))
          {
             file.CopyTo(fs);
              fs.Flush();
          }
      }
      ViewBag.Message = $"{files.Count}个文件 /{size}字节上传成功!";
      return View();
  }
Copier après la connexion

Comme ci-dessus, obtenez le chemin du répertoire racine du site Web en injectant un IHostingEnvironment HostingEnv privé. Demandez la méthode d'action dans le formulaire avant en effectuant le rendu, comme suit :

<form method="post" enctype="multipart/form-data" asp-controller="Upload" asp-action="UploadFiles">
</form>
Copier après la connexion

Bien sûr, n'oubliez pas d'ajouter TagHelper :

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Copier après la connexion

Après un téléchargement réussi, nous affichons la taille en octets téléchargé, comme suit :

Nous pouvons voir les fichiers téléchargés dans le répertoire racine du site Web, comme suit :

Ce qui précède n'est qu'un petit test de soumission via le formulaire. Ensuite, nous développerons la soumission via Ajax. Nous modifions le type de formulaire soumettre au bouton, comme suit :

 <p class="row">
    <p class="form-group">
         <p class="col-md-10">
                    <p>使用表单上传多个文件</p>
                    <input type="file" id="files" name="files" multiple />
                    @ViewBag.Message
         </p>
     </p>
 </p>

 <p class="row">
     <p class="form-group">
          <p class="col-md-10">
                 <input type="button" id="upload" class="btn btn-success" style="cursor:pointer;width:100px;" value="上传" />
          </p>
     </p> 
 </p>
Copier après la connexion

Nous utilisons l'objet FormData pour obtenir le fichier à soumettre en Ajax, comme suit :

  $(function () {
      $("#upload").click(function (evt) {
           var fileUpload = $("#files").get(0);
           var files = fileUpload.files;
           var data = new FormData();
           for (var i = 0; i < files.length ; i++) {
               data.append(files[i].name, files[i]);
           }
           $.ajax({
              type: "POST",
              url: "/Upload/UploadFiles",
              contentType: false,
              processData: false,
              data: data,
              success: function (message) {
                  alert(message);
              },
              error: function () {
                  alert("上传文件出现错误!");
              }
           });
       });
   });
Copier après la connexion

A ce moment, le fond doit être légèrement modifié. Nous n'avons plus besoin de l'interface IFormFile pour obtenir le fichier, mais l'obtenons via le formulaire dans la requête, comme suit :

 public IActionResult UploadFiles()
 {
    long size = 0;
    var files = Request.Form.Files;
    foreach (var file in files)
    {
         //var fileName = file.FileName;
         var fileName = ContentDispositionHeaderValue
                        .Parse(file.ContentDisposition)
                        .FileName
                        .Trim(&#39;"&#39;);
         fileName = hostingEnv.WebRootPath + $@"\{fileName}";
         size += file.Length;
         using (FileStream fs = System.IO.File.Create(fileName))
         {
             file.CopyTo(fs);
             fs.Flush();
         }
     }
     ViewBag.Message = $"{files.Count}个文件 /{size}字节上传成功!";
     return View();
 }
Copier après la connexion

À ce stade, le téléchargement dans ASP.NET Core MVC touche à sa fin. Il s'agit encore d'une exigence relativement simple mais relativement courante.

Importer et exporter Excel

Le projet devait utiliser l'importation et l'exportation par lots, j'ai donc fait quelques recherches lorsque le noyau .net est né, il n'y avait pas d'exportation pour Excel dans le noyau .net. Cependant, j'ai vu des jardiniers enthousiastes dans le jardin et le partageant. Exportez Excel, mais le blogueur a découvert que le 19 février, un étranger avait exporté et importé Excel pour .net core. La version actuelle est la 1.3 basée sur EPPlus. Les fonctions sont similaires à EPPlus, mais elle a été transplantée sur .net core. Jetons un coup d'oeil. Nous téléchargeons d’abord le package EPPlus.Core, comme suit :

On exporte le code directement :

  [HttpGet]
  [Route("Export")]
  public string Export()
  {
      string sWebRootFolder = _hostingEnvironment.WebRootPath;
      string sFileName = @"Jeffcky.xlsx";
      string URL = string.Format("{0}://{1}/{2}", Request.Scheme, Request.Host, sFileName);
      FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
      if (file.Exists)
      {
          file.Delete();
          file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
      }
      using (ExcelPackage package = new ExcelPackage(file))
      {
          // add a new worksheet
          ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Jeffcky");
                
          //sheet header
          worksheet.Cells[1, 1].Value = "ID";
          worksheet.Cells[1, 2].Value = "Name";
          worksheet.Cells[1, 3].Value = "Age";

          //Add values
          worksheet.Cells["A2"].Value = 1000;
          worksheet.Cells["B2"].Value = "Jeffcky1";
          worksheet.Cells["C2"].Value = 18;

          worksheet.Cells["A3"].Value = 1001;
          worksheet.Cells["B3"].Value = "Jeffcky2";
          worksheet.Cells["C3"].Value = 19;


          package.Save(); //Save the workbook.
      }
      return URL;

  }
Copier après la connexion

Ici, nous l'encapsulons de manière unifiée et l'exportons. Il nous suffit de définir les attributs d'exportation et de lister les données, comme suit :

public IActionResult Export()
{
    var properties = new PropertyByName<Person>[]
    {
         new PropertyByName<Person>("Id",d=>d.Id),
         new PropertyByName<Person>("Name",d=>d.Name),
         new PropertyByName<Person>("Age",d=>d.Age)
     };

     var list = new List<Person>()
     {
         new Person() {Id=1,Name="Jeffcky1",Age=18 },
         new Person() {Id=2,Name="Jeffcky2",Age=19 },
         new Person() {Id=3,Name="Jeffcky3",Age=20 },
         new Person() {Id=4,Name="Jeffcky4",Age=21 },
         new Person() {Id=5,Name="Jeffcky5",Age=22 }
     };
     var bytes = _ExportManager.ExportToXlsx<Person>(properties, list);
     return new FileContentResult(bytes, MimeTypes.TextXlsx);
 }
Copier après la connexion

.

Après avoir parlé d'export, regardons l'import. Lisons les données que nous venons d'importer et renvoyons-les à la page :

 public string Import()
 {
    string sWebRootFolder = _hostingEnvironment.WebRootPath;
    string sFileName = @"Jeffcky.xlsx";
    FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
    try
    {
        using (ExcelPackage package = new ExcelPackage(file))
        {
            StringBuilder sb = new StringBuilder();
            ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
            int rowCount = worksheet.Dimension.Rows;
            int ColCount = worksheet.Dimension.Columns;
            bool bHeaderRow = true;
            for (int row = 1; row <= rowCount; row++)
            {
                for (int col = 1; col <= ColCount; col++)
                {
                    if (bHeaderRow)
                    {
                         sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t");
                    }
                    else
                    {
                         sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t");
                    }
                 }
                 sb.Append(Environment.NewLine);
            }
            return sb.ToString();
       }
   }
   catch (Exception ex)
   {
       return "Some error occured while importing." + ex.Message;
   }
}
Copier après la connexion

À ce stade, nous encapsulerons de manière unifiée l’importation, comme suit :

 [HttpGet]
 [Route("Import")]
 public void Import()
 {
    string sWebRootFolder = _hostingEnvironment.WebRootPath;
    string sFileName = @"Jeffcky.xlsx";
    FileStream fs = new FileStream(Path.Combine(sWebRootFolder, sFileName), FileMode.Open, FileAccess.Read, FileShare.Read);
    var list = _ImportManager.ImportPersonFromXlsx(fs);
  }
Copier après la connexion

L'introduction de l'import est probablement terminée. Je dirais que la vraie difficulté n'est pas d'utiliser EPPlus pour importer et exporter. La difficulté réside dans l'import par lots, le format des données est vérifié si un modèle d'import est donné. les données par lots sont importées, comment s'assurer que le format de données fourni par l'utilisateur est complètement correct et que les données n'ont pas été vérifiées à plusieurs reprises. Au cours des deux derniers jours, l'importation par lots est pratiquement terminée, ce qui peut être grossièrement divisé en : vérification des éléments de données requis, vérification du format des données et si la base de données existe. Vérification des données, expérience utilisateur du format de retour si la partie d'importation des données ne parvient pas à importer. Lorsque vous utilisez NPOI et EPPlus pour importer et exporter de telles fonctions, cela ne pourrait pas être plus simple. Cependant, si différents scénarios sont rencontrés, comment améliorer l'expérience utilisateur est un problème. Si l'importation des données échoue, comment pouvons-nous demander à l'utilisateur. ? S'il y a des listes déroulantes et des données de cellules fusionnées dans Excel, comment pouvons-nous les obtenir ? C'est une autre question. De nombreux CV peuvent dire qu'ils utiliseront NPOI et EPPlus pour importer et exporter. Les deux ne sont qu'un outil, comment utiliser des outils pour les appliquer à des scénarios complexes et donner des exemples est ce qui est considéré comme avancé.

Résumé

Dans cette section, nous présentons brièvement le téléchargement, l'importation et l'exportation dans .net core, si possible, nous fournirons ultérieurement des connaissances avancées sur EPPlus, comme l'obtention de données de colonnes fusionnées et l'obtention d'images, etc., comme proposé ci-dessus. section Au revoir, oh, SQL Server sera mis à jour régulièrement quand il y aura du temps, à bientôt.

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser divers symboles dans le langage C Comment utiliser divers symboles dans le langage C Apr 03, 2025 pm 04:48 PM

Les méthodes d'utilisation des symboles dans la couverture du langage C Couverture arithmétique, l'affectation, les conditions, la logique, les opérateurs de bits, etc. Les opérateurs arithmétiques sont utilisés pour les opérations mathématiques de base, les opérateurs d'affectation sont utilisés pour les opérations et les opérations de la soustraction, la multiplication et les opérations de division, les opérations BIT sont utilisé pointeurs nuls, marqueurs de fin de fichier et valeurs non nucères.

La différence entre le multithreading et le C # asynchrone La différence entre le multithreading et le C # asynchrone Apr 03, 2025 pm 02:57 PM

La différence entre le multithreading et l'asynchrone est que le multithreading exécute plusieurs threads en même temps, tandis que les opérations effectuent de manière asynchrone sans bloquer le thread actuel. Le multithreading est utilisé pour les tâches à forte intensité de calcul, tandis que de manière asynchrone est utilisée pour l'interaction utilisateur. L'avantage du multi-threading est d'améliorer les performances informatiques, tandis que l'avantage des asynchrones est de ne pas bloquer les threads d'interface utilisateur. Le choix du multithreading ou asynchrone dépend de la nature de la tâche: les tâches à forte intensité de calcul utilisent le multithreading, les tâches qui interagissent avec les ressources externes et doivent maintenir la réactivité de l'interface utilisateur à utiliser asynchrone.

Quel est le rôle de char dans les chaînes C Quel est le rôle de char dans les chaînes C Apr 03, 2025 pm 03:15 PM

En C, le type de char est utilisé dans les chaînes: 1. Stockez un seul caractère; 2. Utilisez un tableau pour représenter une chaîne et se terminer avec un terminateur nul; 3. Faire fonctionner via une fonction de fonctionnement de chaîne; 4. Lisez ou sortant une chaîne du clavier.

Comment utiliser Char Array dans la langue C Comment utiliser Char Array dans la langue C Apr 03, 2025 pm 03:24 PM

Le Array Char stocke des séquences de caractères en C et est déclaré Char Array_name [Taille]. L'élément d'accès est passé par l'opérateur d'indice, et l'élément se termine par le terminateur nul «\ 0», qui représente le point final de la chaîne. Le langage C fournit une variété de fonctions de manipulation de cordes, telles que strlen (), strcpy (), strcat () et strcmp ().

Comment gérer les caractères spéciaux dans la langue C Comment gérer les caractères spéciaux dans la langue C Apr 03, 2025 pm 03:18 PM

Dans le langage C, les caractères spéciaux sont traités à travers des séquences d'échappement, telles que: \ n représente les pauses de ligne. \ t signifie le caractère d'onglet. Utilisez des séquences d'échappement ou des constantes de caractères pour représenter des caractères spéciaux, tels que char c = '\ n'. Notez que l'arrière-plan doit être échappé deux fois. Différentes plates-formes et compilateurs peuvent avoir différentes séquences d'échappement, veuillez consulter la documentation.

Comment convertir le charbon dans la langue C Comment convertir le charbon dans la langue C Apr 03, 2025 pm 03:21 PM

Dans le langage C, la conversion de type char peut être directement convertie en un autre type par: Casting: Utilisation de caractères de casting. Conversion de type automatique: Lorsqu'un type de données peut accueillir un autre type de valeur, le compilateur le convertit automatiquement.

La différence entre char et wchar_t dans le langage C La différence entre char et wchar_t dans le langage C Apr 03, 2025 pm 03:09 PM

Dans le langage C, la principale différence entre Char et WCHAR_T est le codage des caractères: Char utilise ASCII ou étend ASCII, WCHAR_T utilise Unicode; Char prend 1 à 2 octets, WCHAR_T occupe 2-4 octets; Char convient au texte anglais, WCHAR_T convient au texte multilingue; Le char est largement pris en charge, WCHAR_T dépend de la prise en charge du compilateur et du système d'exploitation Unicode; Le char est limité dans la gamme de caractères, WCHAR_T a une gamme de caractères plus grande et des fonctions spéciales sont utilisées pour les opérations arithmétiques.

Quelle est la fonction de la somme du langage C? Quelle est la fonction de la somme du langage C? Apr 03, 2025 pm 02:21 PM

Il n'y a pas de fonction de somme intégrée dans le langage C, il doit donc être écrit par vous-même. La somme peut être obtenue en traversant le tableau et en accumulant des éléments: Version de boucle: la somme est calculée à l'aide de la longueur de boucle et du tableau. Version du pointeur: Utilisez des pointeurs pour pointer des éléments de tableau, et un résumé efficace est réalisé grâce à des pointeurs d'auto-incitation. Allouer dynamiquement la version du tableau: allouer dynamiquement les tableaux et gérer la mémoire vous-même, en veillant à ce que la mémoire allouée soit libérée pour empêcher les fuites de mémoire.

See all articles