- Inicie o Visual Studio 2022 IDE.
- Clique em “Criar novo projeto”.
- Na janela “Criar novo projeto”, selecione “API da Web ASP.NET Core” na lista de modelos exibidos.
- Clique em Avançar.
- Na janela “Configurar seu novo projeto”, especifique o nome e o local do novo projeto. Opcionalmente, verifique a caixa de seleção “Coloque a solução e o projeto no mesmo diretório”, dependendo de suas preferências.
- Clique em Avançar.
- Na janela “Informações adicionais” mostrada a seguir, selecione “.NET 9.0 (suporte a termo padrão)” como a versão da estrutura e desmarque a caixa de seleção que diz “Use Controllers”, pois usaremos as APIs mínimas neste projeto.
- Em outras partes da janela “Informações adicionais”, deixe o “Tipo de autenticação” definido como “Nenhum” (o padrão) e verifique se as caixas de seleção “Ativar suporte a API aberto”, “configurar para HTTPS” e “Ativar Docker” permanecerem desmarcadas. Não usaremos nenhum desses recursos aqui.
- Clique em Criar.
Usaremos este projeto ASP.NET Core Web API para trabalhar com os exemplos de código fornecidos nas seções abaixo.
IFORMFILE e IFORMFILECOLLECÇÃO NO ASP.NET CORE
Nas versões recentes do CORE ASP.NET, as APIs mínimas fornecem suporte para o upload de arquivos usando o IFormFile e IFormFileCollection interfaces. Enquanto IFormFile é usado para fazer upload de um único arquivo, IFormFileCollection é usado para fazer upload de vários arquivos. O snippet de código a seguir ilustra como você pode fazer upload de um único arquivo usando IFormFile em seu aplicativo mínimo de API.
app.MapPost("/upload", async (IFormFile file) =>
{
var tempFile = Path.GetTempFileName();
using var fileStream = File.OpenWrite(tempFile);
await file.CopyToAsync(fileStream);
});
Observe que o File.OpenWrite o método aceita o caminho para um arquivo em seu sistema de arquivos como um parâmetro e retorna um FileStream exemplo. Como o seu nome indica, um FileStream O objeto fornece a Stream Para um arquivo, significando uma sequência de bytes.
Da mesma forma, a seguinte parte do código mostra como você pode fazer upload de vários arquivos usando o IFormFileCollection interface.
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);
}
});
Muitas vezes, queremos fazer mais com um arquivo do que simplesmente enviá -lo. Se queremos analisar ou manipular o conteúdo de um arquivo (OK?)podemos aproveitar o StreamReader aula. StreamReader é uma classe de alto nível, construída sobre FileStreamisso nos permite ler os personagens de um fluxo de bytes. StreamReader Também pode lidar com a codificação de caracteres (UTF-8, ASCII, etc.), se necessário.
Digamos que você tenha um arquivo que contenha registros do autor que você deseja inserir em uma tabela de banco de dados. Supondo que cada linha de texto no arquivo represente um registro de autor diferente, você pode incluir o seguinte código no seu arquivo programa.cs para fazer upload do conteúdo do arquivo, linha por linha, para um ponto de extremidade mínima da API.
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);
});
Você pode usar o trecho de código anterior para ler uma coleção de dados do autor representados como JSON, por exemplo, e inserir esses registros em uma tabela de banco de dados. Observe que eu omiti o código -fonte do IAuthorRepository Interface e suas classes implementadas aqui para a brevidade.
Evitando erros anti-forgem ao fazer o upload de arquivos
Ao fazer o upload de arquivos no CORE ASP.NET, você pode encontrar erros anti-fortes. O ASP.NET Core emite esses erros para alertar sobre ataques de falsificação de solicitação entre sites.
Figura 1: O núcleo do ASP.NET pode gerar um erro anti-fortaleza ao fazer o upload de um arquivo.
Fundição
Se o seu endpoint estiver seguro e não exigir proteção anti-fortal DisableAntiforgery método, como mostrado no código a seguir.
