Cómo obtener datos de BlazorInputfile

Oct 28 2020

uso BlazorInputFile en mi proyecto pero no sé cómo transformar la secuencia que obtengo del archivo de entrada (un archivo zip) en un archivo ZipArchive para recorrerlo ....

Veo que el flujo está bien, pero cuando intento hacer una copia para sincronizar con un flujo de memoria, no funciona y me dice que la variable no está disponible.

Así que lo intento con un await antes del copytoasync con una tarea asíncrona en lugar de mi función void loadFile, y ahora vi el ms disponible pero está vacío, el tamaño es 0 ... parece que no pasó nada en el 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...
                    }
            }            
        }

Respuestas

mohammadmahdiTalachi Nov 04 2020 at 20:48

Yo tuve este problema también . Puede obtener bytes de archivo y enviarlos a su Api y luego crear el archivo nuevamente allí.

en tu 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();
            }
}

en tu api

//file.content is aray of byte

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