2015-10-23 11 views
11

sto cercando di confezionare i file in un file zip utilizzando Adm-ZipAdm Zip zippare i file come directory

var AdmZip = require('adm-zip'); 

var pathToZip = 'build/release/Ext.zip'; 


var zip = new AdmZip(); 

zip.addLocalFile('background.js'); 
zip.addLocalFile('chrome_ex_oauth.html'); 
zip.addLocalFolder('images'); 
zip.writeZip(pathToZip); 

Tuttavia, tutti i file sono sempre aggiunto come cartelle all'interno della cerniera e il contenuto effettivo non è sempre zippato.

Screenshot

Il riferimento introduttiva è inferiore e questo sembra essere un esempio molto semplice che non funziona come previsto. Che cosa sto facendo di sbagliato? https://github.com/cthackers/adm-zip/wiki/ADM-ZIP-Introduction

+0

1,5 anni più tardi e sto avendo lo stesso problema ... –

risposta

13

così ho fatto qualche ricerca: https://github.com/cthackers/adm-zip/blob/master/adm-zip.js#L275

addfile è in ultima analisi, chiamato da addLocalFile, e che sembra essere dove si verifica l'errore, in particolare sulla line 281 dove si controlla se lo ZipEntry è una directory. Le bandiere sbagliate vengono applicate.

Per aggirare questo problema, ho finito con la chiamata di addFile manualmente e ho specificato gli attributi da solo, in modo che non si basasse sul rilevamento automatico e contrassegnasse erroneamente i file come directory.

addFile(filePathInArchive, fileBuffer, '', 0644 << 16); 

Per ottenere un fileBuffer te stesso, è possibile utilizzare fs.readFile o fs.readFileSync

+1

La maggior parte dei file aggiunti allo ZIP sono danneggiati. – Pawel

+0

Linke da emettere su Github: https://github.com/cthackers/adm-zip/issues/182 – meonlol

-1

Dal wiki di adm-zip:

[vuoto] addLocalFile (String localPath, String zipPath)

Aggiunge un file dal disco all'archivio.

[vuoto] addLocalFolder (String localPath, String zipPath)

Aggiunge una directory locale e tutti i suoi file nidificati e directory per l'archivio

A quanto pare si dimentica il secondo parametro che è lo zipPath.

+2

no, posso confermare l'affermazione OP. addLocalFile aggiunge il file come directory con o senza il secondo argomento. Osservo anche che addFile fa lo stesso a meno che non si usi 0644 << 16 come 4 ° parametro. –

0
var zip = new admZip(); 
var fs=require('fs-extra'); 
zip.addFile('NGINX/app.js',fs.readFileSync('./app.js'),'',0644); 
zip.writeZip("./files.zip"); 
Problemi correlati