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

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

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 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!