Come ottenere dati da BlazorInputfile

Oct 28 2020

Uso BlazorInputFile nel mio progetto ma non so come trasformare il flusso che ottengo dal file di input (un zipFile) in un ZipArchive per eseguire il loop in esso ....

vedo che lo stream è ok ma quando provo a fare un copytoasync su un memorystream non funziona dicendomi che la variabile non è disponibile.

Quindi provo con un'attesa prima del copytoasync con un'attività asincrona invece della mia funzione void loadFile, e ora ho visto il ms disponibile ma è vuoto, la dimensione è 0 ... sembra che non sia successo nulla nel 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...
                    }
            }            
        }

Risposte

mohammadmahdiTalachi Nov 04 2020 at 20:48

Anch'io ho avuto questo problema. Puoi ottenere byte di file e inviarli alla tua API, quindi creare nuovamente il file lì.

nel tuo 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();
            }
}

nella tua API

//file.content is aray of byte

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