web-dev-qa-db-ja.com

ディレクトリとしてのAdmZip圧縮ファイル

Adm-Zipを使用してファイルをZipファイルにパックしようとしています

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);

ただし、すべてのファイルはZip内のフォルダーとして追加されており、実際のコンテンツは圧縮されていません。

Screenshot

はじめにのリファレンスは以下のとおりです。これは非常に単純な例のようで、期待どおりに機能していません。私は何が間違っているのですか? https://github.com/cthackers/adm-Zip/wiki/ADM-Zip-Introduction

13
shashi

だから私はいくつか掘り下げました: https://github.com/cthackers/adm-Zip/blob/master/adm-Zip.js#L275

addFileは最終的にaddLocalFileによって呼び出され、エラーが発生している場所、特に 281行目 でZipEntryがディレクトリかどうかを確認しているようです。間違ったフラグが適用されています。

これを回避するために、addFileを手動で呼び出し、属性を自分で指定して、自動検出に依存せず、ファイルをディレクトリとして誤ってフラグ付けしないようにしました。

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

FileBufferを自分で取得するには、 fs.readFile または fs.readFileSync を使用できます。

14
Speedy
var Zip = new admZip();
var fs=require('fs-extra');
Zip.addFile('NGINX/app.js',fs.readFileSync('./app.js'),'',0644);
Zip.writeZip("./files.Zip");
0
Andrew Rayan