Jak uzyskać dane z BlazorInputfile
Oct 28 2020
używam BlazorInputFile w moim projekcie, ale nie wiem, jak przekształcić strumień, który otrzymuję z pliku wejściowego (zipFile) na ZipArchive, aby zapętlić w nim ....
Widzę, że strumień jest w porządku, ale kiedy próbuję wykonać kopiowanie do strumienia pamięci, nie działa, mówiąc mi, że zmienna jest niedostępna.
Więc próbuję z oczekiwaniem przed copytoasync z zadaniem asynchronicznym zamiast mojej funkcji void loadFile i widziałem teraz dostępny ms, ale jego pusty, rozmiar to 0 ... wydaje się, że nic się nie wydarzyło w 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...
}
}
}
Odpowiedzi
mohammadmahdiTalachi Nov 04 2020 at 20:48
Ja też miałem ten problem. Możesz pobrać bajty pliku i wysłać je do swojego Api, a następnie ponownie utworzyć plik.
w swoim komponencie
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();
}
}
w twoim api
//file.content is aray of byte
using var memoryStream = new MemoryStream(file.Content);