Cara mendapatkan data dari BlazorInputfile

Oct 28 2020

saya menggunakan BlazorInputFile pada proyek saya tetapi tidak tahu bagaimana mengubah aliran yang saya dapatkan dari file input (zipFile) ke ZipArchive untuk mengulang di dalamnya ....

saya melihat alirannya baik-baik saja tetapi ketika saya mencoba membuat copytoasync ke aliran memori itu tidak berfungsi memberi tahu saya bahwa variabel tidak tersedia.

Jadi saya mencoba dengan menunggu sebelum copytoasync dengan tugas async alih-alih fungsi void loadFile saya, dan saya melihat sekarang ms tersedia tetapi kosong, ukurannya 0 ... sepertinya tidak ada yang terjadi di 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...
                    }
            }            
        }

Jawaban

mohammadmahdiTalachi Nov 04 2020 at 20:48

Saya punya masalah ini juga. Anda bisa mendapatkan byte file dan mengirimkannya ke Api Anda lalu membuat file lagi di sana.

di komponen Anda

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

di api Anda

//file.content is aray of byte

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