Heim  >  Artikel  >  Backend-Entwicklung  >  Teilen Sie ein Beispiel-Tutorial zum Hoch- und Herunterladen von Bildern mit .Net Core

Teilen Sie ein Beispiel-Tutorial zum Hoch- und Herunterladen von Bildern mit .Net Core

零下一度
零下一度Original
2017-06-17 10:26:471996Durchsuche

In diesem Artikel wird hauptsächlich die von .Net Core implementierte Bild-Datei-Upload-Download-Funktion vorgestellt. Sie hat einen bestimmten Referenzwert.

Jetzt Der .Net Core Das Projekt ist nach einem Regen wie Pilze aus dem Boden geschossen. Als Mitglied der .Net-Armee habe ich .Net Core begeistert angenommen und es aktiv für die Geschäftsentwicklung genutzt. Lassen Sie uns zunächst die Implementierung des Datei-Uploads und -Downloads im Rahmen des .Net Core-Projekts vorstellen. Schnittstelle.

1. Entwicklungsumgebung

Zweifellos die erste IDE im Universum VisualStudio 2017

2, Projektstruktur

FilesController Datei-Upload und -DownloadController

PictureController Bild-Upload- und Download-Controller

Return_Helper_DG Rückgabewert-Hilfeklasse

3. Schauen wir uns zunächst Startup.cs an. Hier gehen wir vor. Eine Reihe von Konfigurationen.

Domänenübergreifende Konfiguration:

Selbstverständlich sind domänenübergreifende Verweise auf DLLs unverzichtbar. Wir verwenden Nuget um auf verwandte Referenzpakete zu verweisen.

Ersetzung des Serverressourcenpfads, wodurch verhindert werden kann, dass der Client den Serverdateipfad errät, und ein virtueller Schatten für den Zugriff erstellt wird, was die Sicherheit erhöht.

Der vollständige Code von Startup.cs lautet wie folgt:


2. Benutzersätze der Klasse Return_Helper_DG ein einheitlicher Rückgabewert wird an den Client zurückgegeben

Der Code der Return_Helper_DG-Klasse lautet wie folgt:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Logging;
using System.IO;

namespace QX_Core.FilesCenter
{
 public class Startup
 {
 public Startup(IHostingEnvironment env)
 {
  var builder = new ConfigurationBuilder()
  .SetBasePath(env.ContentRootPath)
  .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
  .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
  .AddEnvironmentVariables();
  Configuration = builder.Build();
 }

 public IConfigurationRoot Configuration { get; }

 // This method gets called by the runtime. Use this method to add services to the container.
 public void ConfigureServices(IServiceCollection services)
 {
  // Add framework services.
  services.AddMvc();
  #region CORS
  services.AddCors(options =>
  {
  options.AddPolicy("AllowSpecificOrigin",
   builder => builder.WithOrigins("http://localhost:3997").AllowAnyHeader().AllowAnyOrigin().AllowAnyMethod());
  });
  #endregion
 }

 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
 {
  //loggerFactory.AddConsole(Configuration.GetSection("Logging"));
  //loggerFactory.AddDebug();

  app.UseMvc();
  // Shows UseCors with named policy.
  app.UseCors("AllowSpecificOrigin");

  app.UseStaticFiles(new StaticFileOptions()
  {
  FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot/Files")),
  RequestPath = new PathString("/src")
  });
 }
 }
}



3. FilesController ist unser Datei-Upload-Controller Schnittstelle, die den Vorgang zum Empfangen von Upload-Dateien definiert und eine domänenübergreifende Konfiguration auf dem Controller ermöglicht

using System.Net;
/**
* author:qixiao
* create:2017-5-19 15:15:05
* */
namespace QX_Core.FilesCenter.QX_Core.Helper
{
 public abstract class Return_Helper_DG
 {
 public static object IsSuccess_Msg_Data_HttpCode(bool isSuccess, string msg, dynamic data, HttpStatusCode httpCode = HttpStatusCode.OK)
 {
  return new { isSuccess = isSuccess, msg = msg, httpCode = httpCode, data = data };
 }
 public static object Success_Msg_Data_DCount_HttpCode(string msg, dynamic data = null, int dataCount = 0, HttpStatusCode httpCode = HttpStatusCode.OK)
 {
  return new { isSuccess = true, msg = msg, httpCode = httpCode, data = data, dataCount = dataCount };
 }
 public static object Error_Msg_Ecode_Elevel_HttpCode(string msg, int errorCode = 0, int errorLevel = 0, HttpStatusCode httpCode = HttpStatusCode.InternalServerError)
 {
  return new { isSuccess = false, msg = msg, httpCode = httpCode, errorCode = errorCode, errorLevel = errorLevel };
 }
 }
}


Im obigen Code begrenzen wir die Größe der hochgeladenen Datei , Und geben Sie Feedback zur Dateigröße.

using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Net.Http.Headers;
using QX_Core.FilesCenter.QX_Core.Helper;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace QX_Core.FilesCenter.Controllers
{
 //[Produces("application/json")]
 [Route("api/[controller]")]
 [EnableCors("AllowSpecificOrigin")]
 public class FilesController : Controller
 {
 private IHostingEnvironment hostingEnv;

 public FilesController(IHostingEnvironment env)
 {
  this.hostingEnv = env;
 }

 [HttpPost]
 public IActionResult Post()
 {
  var files = Request.Form.Files;
  long size = files.Sum(f => f.Length);

  //size > 100MB refuse upload !
  if (size > 104857600)
  {
  return Json(Return_Helper_DG.Error_Msg_Ecode_Elevel_HttpCode("files total size > 100MB , server refused !"));
  }

  List<string> filePathResultList = new List<string>();

  foreach (var file in files)
  {
  var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim(&#39;"&#39;);

  string filePath = hostingEnv.WebRootPath + $@"\Files\Files\";

  if (!Directory.Exists(filePath))
  {
   Directory.CreateDirectory(filePath);
  }

  fileName = Guid.NewGuid() + "." + fileName.Split(&#39;.&#39;)[1];

  string fileFullName = filePath + fileName;

  using (FileStream fs = System.IO.File.Create(fileFullName))
  {
   file.CopyTo(fs);
   fs.Flush();
  }
  filePathResultList.Add($"/src/Files/{fileName}");
  }

  string message = $"{files.Count} file(s) /{size} bytes uploaded successfully!";

  return Json(Return_Helper_DG.Success_Msg_Data_DCount_HttpCode(message, filePathResultList, filePathResultList.Count));
 }

 }
}
4. PictureController-Schnittstelle zum Hochladen von Bildern, ähnlich einer Datei, weist jedoch Prüfsummenbeschränkungen für die Art der hochgeladenen Bilder auf.


Punkt, unser Datei- und Bild-Upload-Code ist fertig. Als nächstes implementieren wir den Client für den Datei-Upload

using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Net.Http.Headers;
using QX_Core.FilesCenter.QX_Core.Helper;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace QX_Core.FilesCenter.Controllers
{
 //[Produces("application/json")]
 [Route("api/[controller]")]
 [EnableCors("AllowSpecificOrigin")]
 public class PicturesController : Controller
 {
 private IHostingEnvironment hostingEnv;

 string[] pictureFormatArray = { "png", "jpg", "jpeg", "bmp", "gif","ico", "PNG", "JPG", "JPEG", "BMP", "GIF","ICO" };

 public PicturesController(IHostingEnvironment env)
 {
  this.hostingEnv = env;
 }

 [HttpPost]
 public IActionResult Post()
 {
  var files = Request.Form.Files;
  long size = files.Sum(f => f.Length);

  //size > 100MB refuse upload !
  if (size > 104857600)
  {
  return Json(Return_Helper_DG.Error_Msg_Ecode_Elevel_HttpCode("pictures total size > 100MB , server refused !"));
  }

  List<string> filePathResultList = new List<string>();

  foreach (var file in files)
  {
  var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim(&#39;"&#39;);

  string filePath = hostingEnv.WebRootPath + $@"\Files\Pictures\";

  if (!Directory.Exists(filePath))
  {
   Directory.CreateDirectory(filePath);
  }

  string suffix = fileName.Split(&#39;.&#39;)[1];

  if (!pictureFormatArray.Contains(suffix))
  {
   return Json(Return_Helper_DG.Error_Msg_Ecode_Elevel_HttpCode("the picture format not support ! you must upload files that suffix like &#39;png&#39;,&#39;jpg&#39;,&#39;jpeg&#39;,&#39;bmp&#39;,&#39;gif&#39;,&#39;ico&#39;."));
  }

  fileName = Guid.NewGuid() + "." + suffix;

  string fileFullName = filePath + fileName;

  using (FileStream fs = System.IO.File.Create(fileFullName))
  {
   file.CopyTo(fs);
   fs.Flush();
  }
  filePathResultList.Add($"/src/Pictures/{fileName}");
  }

  string message = $"{files.Count} file(s) /{size} bytes uploaded successfully!";

  return Json(Return_Helper_DG.Success_Msg_Data_DCount_HttpCode(message, filePathResultList, filePathResultList.Count));
 }

 }
}

4. Client-Implementierung

Unser Client ist sehr einfach. Verwenden Sie jQuery Ajax, um Bilddateien einzureichen und den Client-Code zu implementieren:


5. Codetests

<!doctype>

<head>
 <script src="jquery-3.2.0.min.js"></script>
 <script>
 $(document).ready(function () {
  var appDomain = "http://localhost:53972/";
  $("#btn_fileUpload").click(function () {
    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: appDomain+&#39;api/Pictures&#39;,
   contentType: false,
   processData: false,
   data: data,
   success: function (data) {
   console.log(JSON.stringify(data));
   },
   error: function () {
   console.log(JSON.stringify(data));
   }
  });
  });
  //end click


 })
 </script>
</head>
<title></title>

<body>
 <article>
 <header>
  <h2>article-form</h2>
 </header>
 <p>
  <form id="uploadForm" enctype="multipart/form-data">
  <input type="file" id="files" name="files" placeholder="file" multiple>file-multiple属性可以选择多项<br><br>
  <input type="button" id="btn_fileUpload" value="fileUpload">
  </form>
 </p>
 </article>
</body>

1 Server

Wir können sehen, dass eine Konsole und ein Web automatisch gestartet werden und das Web den Anforderungsrückgabewert des Standardwerte-Controllers anzeigt.

2. Bild-Upload

Wir verwenden Ajax, um Bilder hochzuladen, öffnen die Testwebseite, wählen das Bild aus, klicken auf Hochladen und sehen die von der Konsole zurückgegebenen Ergebnisse:

Sie können sehen, dass ein Bild erfolgreich hochgeladen wurde!

Geben Sie die Absenderadresse ein. Wir können hier sehen, dass der Zugriff auf das Bild erfolgreich war:

Hochladen mehrere Bilder:

Es ist ersichtlich, dass das Hochladen mehrerer Bilder kein Problem darstellt!

Führen Sie auf ähnliche Weise den Datei-Upload-Test durch:

Ebenso gibt es keine Probleme beim Datei-Upload!

6. Zusammenfassung

Bisher haben wir alle erwarteten Funktionen zum Hochladen von .Net Core-Bilddateien erreicht!

Das obige ist der detaillierte Inhalt vonTeilen Sie ein Beispiel-Tutorial zum Hoch- und Herunterladen von Bildern mit .Net Core. 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