Download file ZIP in .NET Core Web API e C#
In questo articolo vediamo come creare un end-point in un nostro progetto .NET Core Web API per creare e scaricare un file ZIP.
Come linguaggio useremo C#.
La cartella dove ci stanno i files da comprimere si troverà all'interno del progetto, e la chiamiamo Files.
Li dentro mettete un pò di files.
A questo punto vediamo il controller:
using Microsoft.AspNetCore.Mvc;
using System.IO.Compression;
namespace test_csharp_api_core.Controllers
{
[ApiController]
[Route("api/files")]
public class ZipController : ControllerBase
{
private readonly IWebHostEnvironment _hostEnvironment;
public ZipController(IWebHostEnvironment hostEnvironment)
{
_hostEnvironment = hostEnvironment;
}
[HttpGet]
[Route("download-zip")]
public IActionResult DownloadFiles()
{
try
{
var folderPath = Path.Combine(_hostEnvironment.ContentRootPath, "Files");
if (!Directory.Exists(folderPath))
{
return NotFound("La cartella non esiste");
}
var files = Directory.GetFiles(folderPath);
if (files.Length == 0)
{
return NotFound("Non ci sono files da scaricare");
}
using (var memoryStream = new MemoryStream())
{
using (var zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
foreach (var file in files)
{
var fileInfo = new FileInfo(file);
var entry = zipArchive.CreateEntry(fileInfo.Name);
using (var entryStream = entry.Open())
using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
{
fileStream.CopyTo(entryStream);
}
}
}
memoryStream.Seek(0, SeekOrigin.Begin);
return File(memoryStream.ToArray(), "application/zip", "files.zip");
}
}
catch (Exception ex)
{
return StatusCode(500, ex.Message);
}
}
}
}
Una volta avviato il progetto, potete testare l'end-point con Swagger.
Nel mio caso l'url diretto è questo: https://localhost:7031/api/files/download-zip.
Enjoy!
c# asp.net zip
Commentami!