Cómo obtener datos de BlazorInputfile
uso BlazorInputFile en mi proyecto pero no sé cómo transformar la secuencia que obtengo del archivo de entrada (un archivo zip) en un archivo ZipArchive para recorrerlo ....
Veo que el flujo está bien, pero cuando intento hacer una copia para sincronizar con un flujo de memoria, no funciona y me dice que la variable no está disponible.
Así que lo intento con un await antes del copytoasync con una tarea asíncrona en lugar de mi función void loadFile, y ahora vi el ms disponible pero está vacío, el tamaño es 0 ... parece que no pasó nada en el 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...
}
}
}
Respuestas
Yo tuve este problema también . Puede obtener bytes de archivo y enviarlos a su Api y luego crear el archivo nuevamente allí.
en tu componente
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();
}
}
en tu api
//file.content is aray of byte
using var memoryStream = new MemoryStream(file.Content);