...

Upload de Arquivos Simplificado com Minimal APIs no ASP.NET Core

O ASP.NET Core tem evoluído constantemente para facilitar a vida dos desenvolvedores, e uma das adições mais notáveis é o modelo de hospedagem simplificado conhecido como Minimal APIs. Essa abordagem permite construir APIs leves com o mínimo de dependências, ideal para projetos que necessitam de agilidade e eficiência. Recentemente, as Minimal APIs ganharam suporte para upload de arquivos, utilizando as interfaces IFormFile e IFormFileCollection. Vamos explorar como isso funciona e como podemos tirar o máximo proveito dessa funcionalidade.

Upload Simples com IFormFile

Para quem precisa lidar com o upload de um único arquivo, a interface IFormFile é a ferramenta certa. Ela representa um arquivo enviado através de um formulário HTML e oferece métodos para acessar o conteúdo do arquivo, metadados e outras informações relevantes. Utilizar essa interface em uma Minimal API é surpreendentemente simples:

app.MapPost("/upload", async (IFormFile file) =>
{
    var tempFile = Path.GetTempFileName();
    using var fileStream = File.OpenWrite(tempFile);
    await file.CopyToAsync(fileStream);
});

Neste exemplo, a rota /upload recebe um arquivo através do parâmetro file do tipo IFormFile. O arquivo é então copiado para um arquivo temporário no servidor. É importante notar que, em um cenário real, você provavelmente vai querer realizar validações no arquivo (tamanho, tipo, etc.) e armazená-lo em um local mais adequado, como um sistema de arquivos ou um serviço de armazenamento em nuvem.

Upload Múltiplo com IFormFileCollection

E se precisarmos lidar com o upload de múltiplos arquivos de uma só vez? A interface IFormFileCollection entra em cena. Ela representa uma coleção de arquivos enviados através de um formulário HTML e permite iterar sobre cada arquivo individualmente:

app.MapPost("/upload_multiple_files", async (IFormFileCollection files) =>
{
    foreach (var file in files)
    {
        var tempFile = Path.GetTempFileName();
        using var fileStream = File.OpenWrite(tempFile);
        await file.CopyToAsync(fileStream);
    }
});

Neste caso, a rota /upload_multiple_files recebe uma coleção de arquivos através do parâmetro files do tipo IFormFileCollection. O código itera sobre cada arquivo na coleção e o copia para um arquivo temporário. Novamente, em um cenário real, seria necessário adicionar tratamento de erros, validações e lógica de armazenamento adequadas.

Manipulando o Conteúdo dos Arquivos

O upload de arquivos é apenas o primeiro passo. Muitas vezes, precisamos processar o conteúdo desses arquivos de alguma forma. Para isso, podemos utilizar a classe StreamReader, que permite ler o conteúdo do arquivo como um fluxo de caracteres. Isso é especialmente útil para arquivos de texto, como CSV, JSON ou XML.

app.MapPost("/author/upload", (IFormFile file,
    [FromServices] IAuthorRepository authorRepository) =>
{
    using var streamReader = new StreamReader(file.OpenReadStream());
    while (streamReader.Peek() >= 0)
        authorRepository.Create(streamReader.ReadLine() ?? string.Empty);
});

Neste exemplo, a rota /author/upload recebe um arquivo e um repositório de autores (IAuthorRepository) através da injeção de dependência. O código lê o arquivo linha por linha, utilizando o StreamReader, e cria um novo autor no banco de dados para cada linha. É importante notar que este é apenas um exemplo simplificado e que, em um cenário real, seria necessário tratar exceções, validar os dados e implementar uma lógica de negócios mais complex.

Protegendo suas APIs contra ataques CSRF

Ao lidar com o upload de arquivos, é fundamental proteger suas APIs contra ataques de Cross-Site Request Forgery (CSRF). O ASP.NET Core oferece mecanismos de proteção anti-forgery que podem ser facilmente integrados às Minimal APIs. Para habilitar essa proteção, você precisa registrar os serviços anti-forgery no container de injeção de dependência e adicionar o middleware anti-forgery ao pipeline de requisição.

builder.Services.AddAntiforgery();
app.UseAntiforgery();

Além disso, você precisa gerar um token anti-forgery e enviá-lo ao cliente. O cliente, por sua vez, deve incluir esse token em todas as requisições POST subsequentes. Isso garante que a requisição foi originada do seu site e não de um site malicioso.

Em Resumo

As Minimal APIs no ASP.NET Core simplificam o processo de upload de arquivos, oferecendo uma maneira fácil e eficiente de lidar com essa tarefa comum. Ao utilizar as interfaces IFormFile e IFormFileCollection, você pode receber arquivos do cliente, processar seu conteúdo e armazená-los de forma segura. No entanto, é fundamental lembrar de implementar validações, tratamento de erros e mecanismos de proteção anti-forgery para garantir a segurança e a robustez de suas APIs. Com essas ferramentas em mãos, você estará pronto para construir aplicações web modernas e eficientes.

Compartilhe:

Descubra mais sobre MicroGmx

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continue reading