Comment obtenir des données de BlazorInputfile

Oct 28 2020

j'utilise BlazorInputFile sur mon projet , mais ne sais pas comment transformer le flux que je reçois du fichier d'entrée (un fichier zip) à un ZipArchive à boucle en elle ....

Je vois que le flux est ok mais quand j'essaye de faire une copie à asynchroniser à un memorystream cela ne fonctionne pas en me disant que la variable n'est pas disponible.

Donc, j'essaie avec une attente avant la copie à asynchronisation avec une tâche async au lieu de ma fonction vide loadFile, et j'ai vu maintenant le ms disponible mais sa taille est vide, la taille est de 0 ... il semble que rien ne se soit passé dans la copie à asynchronisation ...

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

Réponses

mohammadmahdiTalachi Nov 04 2020 at 20:48

J'ai eu ce problème également . Vous pouvez obtenir des octets de fichiers et les envoyer à votre API, puis créer à nouveau le fichier là-bas.

dans votre composant

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

dans votre api

//file.content is aray of byte

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