วิธีรับข้อมูลจาก 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);