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

325
Vistas
NodeJS: diferentes resultados al generar hash de flujo vs archivo local

Parece que si hago un hash de un flujo de archivos, obtengo un hash diferente que si escribo el flujo en el disco, lo leo y luego lo hago. ¿Posiblemente un problema de codificación o me equivoco de que los hashes DEBERÍAN ser los mismos?

Aquí está mi caso de prueba

 const fs = require("fs"); const crypto = require("crypto"); const https = require("https"); (async ()=>{ const testUrl = "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/SIPI_Jelly_Beans_4.1.07.tiff/lossy-page1-256px-SIPI_Jelly_Beans_4.1.07.tiff.jpg" const filePath = "./testFile.jpg"; https.get(testUrl, async function(response) { await writeFile(filePath, response); const streamHash = await hashFileStream(response) const fileHash = await hashLocalFile(filePath) console.log("Stream Hash", streamHash); console.log("File hash", fileHash); }); })() async function writeFile(filePath, stream) { return new Promise((resolve, reject) => { const file = fs.createWriteStream(filePath); stream.pipe(file) .on('finish', () => { resolve(filePath); }) .on('error', (error)=>{ console.error(error); reject(error); }) }) } async function hashFileStream(stream){ return new Promise((resolve, reject)=>{ const hash = crypto.createHash('md5').setEncoding('hex'); stream.pipe(hash) .on('finish', ()=>{ resolve(hash.read()) }) .on('error', (error)=>{ reject(error) }) }) } async function hashLocalFile(filepath){ const readStream = fs.createReadStream(filepath); return hashFileStream(readStream); }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Ese es tu error. De acuerdo con los documentos del nodo js:

El evento 'finalizar' se emite después de que se haya llamado al método stream.end() y todos los datos se hayan vaciado al sistema subyacente.

Cuando finaliza el evento emitido en la función writeFile , la transmisión termina de escribir datos y no queda nada para la función hashFileStream .

Si solo desea verificar las cadenas hash, la forma más fácil es separar el código y verá que son iguales:

 const fs = require("fs"); const crypto = require("crypto"); const https = require("https"); (async ()=>{ const filePath = "./testFile.jpg"; const testUrl = "https://static2.farakav.com/files/pictures/watermark/01661368.jpg" https.get(testUrl, async function(response) { await writeFile(filePath, response); const fileHash = await hashLocalFile(filePath) console.log("File hash", fileHash); }); https.get(testUrl, async function(response) { const streamHash = await hashFileStream(response) console.log("Stream Hash", streamHash); }); })() async function writeFile(filePath, stream) { return new Promise((resolve, reject) => { const file = fs.createWriteStream(filePath); stream.pipe(file) .on('finish', () => { resolve(filePath); }) .on('error', (error)=>{ console.error(error); reject(error); }) }) } async function hashFileStream(stream){ return new Promise((resolve, reject)=>{ const hash = crypto.createHash('md5').setEncoding('hex'); stream.pipe(hash) .on('finish', ()=>{ hash.end(); resolve(hash.read()) }) .on('error', (error)=>{ reject(error) }) }) } async function hashLocalFile(filepath){ const readStream = fs.createReadStream(filepath); return hashFileStream(readStream); }
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