¿Cómo subir archivos grandes en Flutter web?
Ya hay un hilo excelente acerca de cómo seleccionar archivos: Artículo
Si uso file_picker, termino con List<PlatformFile>? files
.
Pasé withReadStream: true
al método pickFiles para obtener un stream.
Aquí está mi código hasta ahora:
List<PlatformFile>? files = fileUploadView.result?.files;
for (PlatformFile file in files!) {
//-----agregar archivo seleccionado con solicitud
request.files.add(http.MultipartFile(
"Su nombre de parámetro en el lado del servidor", file.readStream!,
file.size,
filename: file.name));
}
//-------Enviar solicitud
var resp = await request.send();
Pero si lo ejecuto, ocurre un error cada pocos segundos:
RangeError: Array buffer allocation failed
at new ArrayBuffer (<anonymous>)
at new Uint8Array (<anonymous>)
at Function._create1 (http://localhost:54372/dart_sdk.js:32192:14)
at Function.new (http://localhost:54372/dart_sdk.js:32155:49)
davy.ai
Solución al error RangeError en Flutter Web al cargar archivos
Si te aparece el error
RangeError: Array buffer allocation failed
al cargar archivos usando Flutter Web, es posible que se deba al parámetrowithReadStream: true
que has pasado al métodopickFiles
del pluginfile_picker
en Flutter. Este parámetro hace que los archivos se lean como un flujo, lo que puede causar problemas con la asignación de búferes de matriz.Para resolver este problema, puedes utilizar el método
readAsBytes()
en lugar dereadStream()
para leer los archivos como bytes. Así es como puedes modificar tu código:Al leer los archivos como bytes y pasarlos al constructor
MultipartFile.fromBytes()
, puedes evitar el errorRangeError
y cargar los archivos correctamente.