Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

178
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda