Cách lấy dữ liệu từ BlazorInputfile

Oct 28 2020

tôi sử dụng BlazorInputFile trong dự án của mình nhưng không biết cách chuyển đổi luồng mà tôi nhận được từ tệp đầu vào (zipFile) thành ZipArchive để lặp lại trong đó ....

tôi thấy luồng ổn nhưng khi tôi cố tạo copytoasync vào dòng bộ nhớ, nó không hoạt động cho tôi biết biến không khả dụng.

Vì vậy, tôi thử với một sự chờ đợi cho copytoasync với một tác vụ không đồng bộ thay vì hàm loadFile void của tôi, và tôi thấy bây giờ ms có sẵn nhưng trống, kích thước là 0 ... dường như không có gì xảy ra trong 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...
                    }
            }            
        }

Trả lời

mohammadmahdiTalachi Nov 04 2020 at 20:48

Tôi cũng có vấn đề này . Bạn có thể lấy byte tệp và gửi tệp đó đến Api của mình sau đó tạo lại tệp ở đó.

trong thành phần của bạn

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

trong api của bạn

//file.content is aray of byte

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