Как получить данные из BlazorInputfile
Oct 28 2020
Я использую BlazorInputFile в своем проекте, но не знаю, как преобразовать поток, который я получаю из входного файла (zipFile), в ZipArchive, чтобы зацикливаться на нем ....
Я вижу, что поток в порядке, но когда я пытаюсь сделать copytoasync для потока памяти, он не работает, говоря мне, что переменная недоступна.
Поэтому я пытаюсь с ожиданием перед copytoasync с задачей async вместо моей void-функции loadFile, и теперь я увидел, что ms доступно, но оно пусто, размер равен 0 ... кажется, что в 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...
}
}
}
Ответы
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);