В современной веб-разработке загрузка файлов является распространенной и важной функцией. Независимо от того, загружают ли пользователи личные аватары, делятся файлами или используют другие цели, хороший механизм загрузки файлов может значительно улучшить взаимодействие с пользователем. Хотя процесс загрузки файлов кажется простым, в реальной разработке такие вопросы, как безопасность, производительность и удобство для пользователя, требуют особого внимания. В этой статье будет рассмотрено, как реализовать функцию загрузки файлов в ASP.NET Core с помощью одной строки кода, с примерами и углубленным анализом.
ASP.NET Core — это высокопроизводительная кроссплатформенная платформа с открытым исходным кодом, предназначенная для создания современных облачных веб-приложений. Его модульная конструкция позволяет разработчикам легко расширять функциональность с помощью пакетов NuGet, поддерживая при этом несколько типов приложений, таких как веб-приложения, веб-API, микросервисы и т. д.
Прежде чем начать, нам необходимо убедиться, что в нашей среде установлены следующие компоненты:
Создайте новое веб-приложение ASP.NET Core с помощью командной строки:
dotnet new webapp -n FileUploadDemo
Введите каталог проекта:
cd FileUploadDemo
В АСП.НЕТ Coreсередина,Шаги по реализации загрузки файлов относительно просты.。мы будем использоватьIFormFile
интерфейс,Он представляет загруженный файл. Следующий,Мы будем реализовывать функцию загрузки файлов шаг за шагом.
существоватьPages
документпапкасередина,Создайте новую страницу Razor.,названныйUpload.cshtml
。существоватьэта страницасередина,Мы добавим простую HTML-форму для выбора файлов и их загрузки.
@page
@model UploadModel
@{
ViewData["Title"] = «Загрузка файла»;
}
<h2>Загрузка файла</h2>
<form method="post" enctype="multipart/form-data">
<div>
<label for="file">Выберите файл:</label>
<input type="file" id="file" name="file" />
</div>
<div>
<button type="submit">загрузить</button>
</div>
</form>
@if (Model.UploadedFileName != null)
{
<p>Загрузка файлауспех:@Model.UploadedFileName</p>
}
существоватьPages
документпапкасередина,Создайте файл с именемUpload.cshtml.cs
изC#документ,Определите логику загрузки файлов.
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
public class UploadModel : PageModel
{
[BindProperty]
public IFormFile File { get; set; }
public string UploadedFileName { get; private set; }
public void OnPost()
{
if (File != null && File.Length > 0)
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/uploads", File.FileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
File.CopyTo(stream);
}
UploadedFileName = File.FileName;
}
}
}
В приведенном выше коде,мы проходим[BindProperty]
Волязагрузитьиздокументпривязать кFile
свойство。когда форма отправлена,OnPost
будет вызван метод,если файл действителен,сохраню это вwwwroot/uploads
Оглавлениесередина。
Чтобы загрузка файлов работала правильно,нам нужно убедитьсясуществоватьStartup.cs
середина Настроен статическийдокумент Служить。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
В АСП.НЕТ Coreсередина,выполнить Загрузка файлаиз Основная логика фактически может быть сжата в одну строку кода.。существоватьOnPost
методсередина,Мы можем напрямую использовать выражения LINQ для обработки загрузки файлов. Вот упрощенная версия, которая сохраняет загруженный файл в указанный каталог:
public void OnPost() => UploadedFileName = File != null && File.Length > 0 ? (File.CopyTo(new FileStream(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/uploads", File.FileName), FileMode.Create), null), File.FileName) : null;
Эта строка кода реализует полную логику загрузки файлов. Хотя этому методу записи не хватает читабельности, он демонстрирует мощные возможности ASP.NET Core.
Функция загрузки файлов связана с проблемами безопасности. В производственной среде мы должны обеспечить:
Startup.cs
серединанастраивать Ограничение размера файла。services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = 10485760; // 10 MB
});