Actualmente estoy desarrollando una aplicación en React Native que maneja archivos y algunos de ellos son zip.
Ya logré descomprimir archivos usando "react-native-zip-archive".
Algunos de los archivos zip contienen archivos html que deben descomprimirse para mostrarse y otros son solo algunos archivos zip aleatorios que el usuario puede descargar.
Mi problema es que me gustaría saber el contenido del archivo zip (como una lista de los archivos contenidos) antes de descomprimirlo para poder descomprimir solo los archivos zip con archivos html dentro.
¿Alguien sabe cómo puedo lograr eso en React-Native?
Hay una herramienta llamada node-stream-zip.
Puede extraer Y leer archivos zip.
https://github.com/antelle/node-stream-zip
import {StreamZip} from 'node-stream-zip'; //Will return true if the zip contains html const containsHTML = async (file) => { const zip = new StreamZip.async({ file: file }); const entriesCount = await zip.entriesCount; console.log(`Entries read: ${entriesCount}`); const entries = await zip.entries(); let found = false; for (const entry of Object.values(entries)) { if(entry.name.endsWith(".html") found = true; break; //We found the html } // Do not forget to close the file once you're done await zip.close(); return found; }Hay una herramienta llamada node-stream-zip.
Esta sería una buena solución a mi problema, pero esta es una librería de nodeJS y parece que usarla en React-Native no funcionará.
El uso de node-stream-zip en mi aplicación nativa de reacción produce este error:
Aquí está mi código:
import ReactNativeBlobUtil from "react-native-blob-util"; import StreamZip from "node-stream-zip"; const fileName = "zipFile.zip"; const App = () => { useEffect(() => { const start = async () => { let dirs = ReactNativeBlobUtil.fs.dirs; await initCopyFromAsset(); const zip = new StreamZip.async({ file: dirs.DocumentDir + "/" + fileName }); }; start(); }, []);