Веб-API ASP.NET — это платформа для создания служб HTTP, к которым могут обращаться различные клиенты, включая веб-браузеры, мобильные устройства и настольные приложения. Он построен на основе платформы ASP.NET и использует протокол HTTP для легкой и эффективной передачи данных.
Веб-API обычно используются для предоставления данных и функций из веб-приложения другим системам или клиентам. Например, веб-сайт электронной коммерции может использовать веб-API для предоставления информации о продуктах и уровнях запасов мобильным приложениям и другим сторонним системам.
Загрузка и скачивание файлов — обычное требование для веб-приложений. В веб-API ASP.NET загрузку и загрузку файлов можно реализовать с помощью класса HttpClient
для отправки и получения файлов.
Чтобы загрузить файл в веб-API ASP.NET, мы создали службу, которая обрабатывает загрузку и загрузку файлов.
Вот полные шаги проекта,
Сервис для управления файлами
public interface IManageImage { Task<string> UploadFile(IFormFile _IFormFile); Task<(byte[], string, string)> DownloadFile(string FileName); }
Реализация услуги
public class ManageImage : IManageImage { public async Task<string> UploadFile(IFormFile _IFormFile) { string FileName = ""; try { FileInfo _FileInfo = new FileInfo(_IFormFile.FileName); FileName = _IFormFile.FileName + "_" + DateTime.Now.Ticks.ToString() + _FileInfo.Extension; var _GetFilePath = Common.GetFilePath(FileName); using (var _FileStream = new FileStream(_GetFilePath, FileMode.Create)) { await _IFormFile.CopyToAsync(_FileStream); } return FileName; } catch (Exception ex) { throw ex; } } public async Task<(byte[], string, string)> DownloadFile(string FileName) { try { var _GetFilePath = Common.GetFilePath(FileName); var provider = new FileExtensionContentTypeProvider(); if (!provider.TryGetContentType(_GetFilePath, out var _ContentType)) { _ContentType = "application/octet-stream"; } var _ReadAllBytesAsync = await File.ReadAllBytesAsync(_GetFilePath); return (_ReadAllBytesAsync, _ContentType, Path.GetFileName(_GetFilePath)); } catch (Exception ex) { throw ex; } } }
API для обработки файлов
[ApiController] public class FileManagerController : ControllerBase { private readonly IManageImage _iManageImage; public FileManagerController(IManageImage iManageImage) { _iManageImage = iManageImage; } [HttpPost] [Route("uploadfile")] public async Task<IActionResult> UploadFile(IFormFile _IFormFile) { var result = await _iManageImage.UploadFile(_IFormFile); return Ok(result); } [HttpGet] [Route("downloadfile")] public async Task<IActionResult> DownloadFile(string FileName) { var result = await _iManageImage.DownloadFile(FileName); return File(result.Item1, result.Item2, result.Item2); } }
Добавление пользовательских служб в Program.cs
using API.FileProcessing.Service; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddTransient<IManageImage, ManageImage>(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
Получить каталог файлов
public static string GetCurrentDirectory() { var result = Directory.GetCurrentDirectory(); return result; } public static string GetStaticContentDirectory() { var result = Path.Combine(Directory.GetCurrentDirectory(), "Uploads\\StaticContent\\"); if (!Directory.Exists(result)) { Directory.CreateDirectory(result); } return result; } public static string GetFilePath(string FileName) { var _GetStaticContentDirectory = GetStaticContentDirectory(); var result = Path.Combine(_GetStaticContentDirectory, FileName); return result; }
Результаты проекта
Таким образом, загрузка и загрузка файлов являются общими функциями приложений веб-API ASP.NET. Чтобы реализовать загрузку и загрузку файлов, нам нужно использовать интерфейс IManageImage. Для загрузки файла мы можем использовать класс IActionResult
для отправки содержимого файла обратно клиенту. Важно правильно проверять и дезинфицировать имя файла и содержимое, чтобы предотвратить уязвимости системы безопасности. Кроме того, мы можем использовать сторонние библиотеки, такие как AutoMapper, чтобы упростить сопоставление моделей данных с моделями просмотра, и Swagger для создания документации для нашего веб-API.
👋 Мое портфолио
🚀 Мой канал на Youtube
💻 https://github.com/shahedbd/API.FileProcessing