So erhalten Sie Daten von BlazorInputfile

Oct 28 2020

Ich verwende BlazorInputFile in meinem Projekt, weiß aber nicht, wie ich den Stream, den ich von der Eingabedatei (einer zipFile) erhalte, in ein ZipArchive umwandeln kann, um ihn zu schleifen.

Ich sehe, dass der Stream in Ordnung ist, aber wenn ich versuche, eine Kopie in einen Memorystream zu kopieren, funktioniert dies nicht und sagt mir, dass die Variable nicht verfügbar ist.

Also versuche ich es mit einem Warten vor dem copytoasync mit einer asynchronen Task anstelle meiner void-Funktion loadFile, und ich habe jetzt gesehen, dass die ms verfügbar ist, aber ihre leere Größe ist 0 ... anscheinend ist nichts in der copytoasync passiert ...

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...
                    }
            }            
        }

Antworten

mohammadmahdiTalachi Nov 04 2020 at 20:48

Ich hatte auch dieses Problem. Sie können Datei-Bytes abrufen und diese an Ihre API senden und dort erneut eine Datei erstellen.

in Ihrer Komponente

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

in deiner api

//file.content is aray of byte

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