Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

170
Vistas
Cómo fragmentar y cargar un archivo grande en Google Bucket

Estoy tratando de cargar archivos más grandes en un depósito de Google desde nodejs. cargar cualquier archivo por debajo y alrededor de la marca de tamaño de 200 MB funciona perfectamente bien. Cualquier cosa mayor que eso devuelve un error.

 Cannot create a string longer than 0x1fffffe8 characters

Al tener un archivo tan grande, descubrí que el nodo tiene limitaciones sobre qué tan grande puede ser un blob/archivo. Aquí están los dos fragmentos de código que arrojan el mismo error

Este es con transmisión de carga

 let fileSize = file.size; fs.createReadStream(file) .pipe( upload({ bucket: BUCKET, file: file, }) ) .on("progress", (progress) => { console.log("Progress event:"); console.log("\t bytes: ", progress.bytesWritten); const pct = Math.round((progress.bytesWritten / fileSize) * 100); console.log(`\t ${pct}%`); }) .on("finish", (test) => { console.log(test); console.log("Upload complete!"); resolve(); }) .on("error", (err) => { console.error("There was a problem uploading the file"); reject(err); });

y, por supuesto, solo una carga de cubo regular

 await storage.bucket(BUCKET) .upload(file.path, { destination: file.name, })

Llegué a la conclusión de que la única solución puede ser fragmentar el archivo, cargarlo en fragmentos y volver a unir los fragmentos de archivo en el depósito. El problema es que no sé cómo hacerlo y no puedo encontrar ninguna documentación en Google o GitHub para esta cláusula.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Para resolver este problema, verifiqué el tamaño del archivo para ver si superaba los 200 MB. Lo dividí en fragmentos de 200 MB (aproximadamente) y luego subí cada uno individualmente. luego unió los archivos con bucket.combine()

Una nota muy importante es agregar el tiempo de espera. de forma predeterminada, Google tiene un tiempo de espera de carga de archivos de 1 minuto, lo configuré en 60 minutos en el fragmento a continuación. Es un enfoque muy hacky, debo admitir

 if (uploadF.size > 209715200) { await splitFile .splitFileBySize(file.path, "2e8") .then(async (names) => { console.log(names); for (let i = 0; i < names.length; i++) { console.log("uploading " + names[i]); await storage .bucket(BUCKET) .upload(names[i], { destination: names[i], timeout: 3600000, }) .catch((err) => { return { status: err }; }); } await bucket .combine(names, file.name) .catch((err) => { return { status: err, }; }); for (let i = 0; i < names.length; i++) { console.log("deleting " + names[i]); await storage .bucket(BUCKET) .file(names[i]) .delete() .then(() => { console.log(`Deleted ${name[i]}`); }) .catch((err) => { return { status: err }; }); } console.log("done"); return { status: "ok" }; })
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda