Estoy tratando de convertir blob a archivo zip. Como resultado del código real, obtengo un archivo zip, pero tiene un formato incorrecto, por lo que no puedo abrirlo. ¿Alguien sabe cómo convertir blob a archivo zip en el formato correcto sin bibliotecas en el lado del cliente?
Mi código real:
<input type="file" onchange="makeArchive(this.files)" value='files' multiple> function makeArchive(files) { const a = document.createElement('a'); const blob = new Blob([...files], {type: 'application/zip'}); a.href = URL.createObjectURL(blob); a.download = `some.zip`; a.click(); }No es posible crear fácilmente un archivo ZIP usando JavaScript sin bibliotecas de terceros .
La función en su ejemplo cortada simplemente concatena los datos binarios de los archivos en una gran mancha. Especificar un tipo MIME de application/zip no tiene efecto en la codificación de los archivos y solo le dice a JavaScript que trate los datos binarios como si fueran un archivo ZIP :
// Example data: const a = new Uint16Array([1337]); const b = new Uint16Array([42]); // This just combines the data of a and b into one file: const stillNotAZip = new Blob([a, b], { type: "application/zip" }); stillNotAZip.arrayBuffer().then(data => console.log(new Uint16Array(data))); // Will output [1337, 42]Si desea crear un archivo ZIP real sin implementar el formato usted mismo, tendrá que recurrir al uso de bibliotecas como JSZip .