Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

168
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!