วิธีรับข้อมูลจาก BlazorInputfile

Oct 28 2020

ฉันใช้BlazorInputFileในโปรเจ็กต์ของฉัน แต่ไม่รู้วิธีแปลงสตรีมที่ฉันได้รับจากไฟล์อินพุต (zipFile) เป็น ZipArchive เพื่อวนซ้ำ ....

ฉันเห็นว่าสตรีมใช้ได้ แต่เมื่อฉันพยายามทำ copytoasync ไปยังสตรีมหน่วยความจำมันไม่ได้ผลโดยบอกว่าตัวแปรไม่พร้อมใช้งาน

ดังนั้นฉันจึงลองรอด้วยการ copytoasync ด้วยงาน async แทน loadFile ฟังก์ชันโมฆะของฉันและฉันเห็นว่าตอนนี้มี ms แต่ว่างเปล่าขนาดเป็น 0 ...

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

คำตอบ

mohammadmahdiTalachi Nov 04 2020 at 20:48

ฉันก็มีปัญหานี้เหมือนกัน คุณสามารถรับไบต์ไฟล์และส่งไปยัง Api ของคุณจากนั้นสร้างไฟล์อีกครั้งที่นั่น

ในส่วนประกอบของคุณ

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

ใน api ของคุณ

//file.content is aray of byte

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