Download file ZIP in .NET Core Web API e C#

Mattepuffo's logo
Download file ZIP in .NET Core Web API e C#

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!


Condividi

Commentami!