Como obter dados do BlazorInputfile

Oct 28 2020

Eu uso BlazorInputFile no meu projeto, mas não sei como transformar o fluxo que recebo do arquivo de entrada (um zipFile) em um ZipArchive para fazer um loop nele ....

vejo que o fluxo está ok, mas quando tento fazer um copytoasync para um fluxo de memória, ele não funciona, dizendo que a variável não está disponível.

Então eu tento esperar antes do copytoasync com uma tarefa async em vez da minha função void loadFile, e eu vi agora o ms disponível, mas está vazio, o tamanho é 0 ... parece que nada aconteceu no copytoasync ...

private async Task loadFileAsync(IFileListEntry fileZip, ExcelWorksheet sheet2User)
        {
              MemoryStream mstest = new MemoryStream();
              await fileZip.Data.CopyToAsync(mstest);
              mstest.Position = 0;

            using (ZipArchive archive = new ZipArchive(mstest, ZipArchiveMode.Update))
            {
                    foreach (ZipArchiveEntry entry in archive.Entries)
                    {
                        //my code...
                    }
            }            
        }

Respostas

mohammadmahdiTalachi Nov 04 2020 at 20:48

Eu tive esse problema também . Você pode obter os bytes do arquivo e enviá-los para a sua API e criar o arquivo novamente lá.

em seu componente

public byte[] FileContent { get; set; }

protected async Task HandleAnswerFileSelected(IFileListEntry[] files)
    {
        foreach (var file in files)
        {
             FileContent = await FIleSender(file),
            
        }
}

public async Task<byte[]> FIleSender(IFileListEntry file)
{
            using (var ms = new MemoryStream())
            {
                await file.Data.CopyToAsync(ms);
                return ms.ToArray();
            }
}

em sua api

//file.content is aray of byte

using var memoryStream = new MemoryStream(file.Content);