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

150
Vistas
problema al identificar si el archivo zip está protegido con contraseña usando javascript

Tengo una aplicación web simple para cargar archivos zip en un servidor. En la parte de Javascript, he usado un bloque try-catch para verificar si los archivos están protegidos con contraseña (una contraseña predefinida y conocida) leyendo las entradas y detectando el error correspondiente.

La biblioteca js que estoy usando es https://github.com/gildas-lormeau/zip.js/blob/master/dist/zip.min.js .

 let reader; try { reader = new zip.ZipReader(new zip.BlobReader(file), { password }); const entries = await reader.getEntries(); for (const entry of entries) { try { await entry.getData(new zip.BlobWriter(), { onprogress: (index, max) => { zip.BlobWriter.$cancel() reader.close() } }); } catch (error) { if (error.message === zip.ERR_ENCRYPTED || error.message === zip.ERR_INVALID_PASSWORD) { alert("Incorrect password") return false; } else { console.log(error) } } } } catch (error) { console.log(error) } finally { await reader.close(); }

El código anterior descubre con éxito si el archivo no está encriptado con la contraseña predeterminada. Sin embargo, para algunos archivos, la declaración de error es la siguiente. TypeError: no se pueden leer las propiedades de undefined (leyendo 'importKey')

Me gustaría saber por qué sucede esto y cómo saber si el archivo está protegido con contraseña o no.

Gracias

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

0

Hay algunos problemas con el código que propuso, por ejemplo, BlobWriter.$cancel no está documentado en ninguna parte y en realidad no existe. Además, debe llamar a reader.close() solo una vez.

A continuación se muestra cómo se podría escribir una función de este tipo.

 const verifyZipPassword = async (file, password) => { const reader = new zip.ZipReader(new zip.BlobReader(file), { password }); const entries = await reader.getEntries(); try { for (const entry of entries) { const abortController = new AbortController(); const signal = abortController.signal; const onprogress = () => abortController.abort(); await entry.getData(new zip.BlobWriter(), { signal, onprogress }); } } catch (error) { if (error.message == zip.ERR_INVALID_PASSWORD) { return false; } else if (error.message != zip.ERR_ABORT) { throw error; } } finally { await reader.close(); } return true; };
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