Keseluruhan folder arkib dan nyahrkib yang sedia ada perlu digunakan dalam projek semasa mencari penyelesaian, saya mencuba beberapa perpustakaan popular, terutamanya adm-zip, JSZip, arkib, dsb.
1.Gunakan adm-zip
adm-zip menyokong fungsi mengarkib dan menyahrkibkan satu atau lebih fail atau keseluruhan folder, yang sangat mudah dan mudah digunakan.
var adm_zip = require('adm-zip'); //creating archives var zip = new adm_zip(); zip.addLocalFolder('archiver'); zip.writeZip('adm/adm-archive.zip'); //extracting archives var unzip = new adm_zip('adm/adm-archive.zip'); unzip.extractAllTo("adm/adm-unarchive/", /*overwrite*/true);
Kebaikan dan keburukan:
1. Ia merealisasikan pemampatan dan penyahmampatan pada masa yang sama, dan boleh beroperasi pada fail atau folder sedia ada selagi laluan disediakan. Ia melaksanakan banyak antara muka dan mudah digunakan.
2. Terdapat pepijat dengan sendirinya, dan kadangkala fail yang dinyahmampat tidak boleh dipulihkan kepada fail asal. Semoga pepijat ini akan diperbaiki dari semasa ke semasa.
2. GunakanJSZip
Apabila menggunakan pustaka ini, anda perlu menambah fail satu demi satu pada objek zip, dan anda perlu menambah kandungan secara manual, kemudian gunakan operasi menulis fail untuk menukar objek zip dalam memori kepada storan fizikal. Jadi jika ia untuk keseluruhan folder, ia sangat menyusahkan dan perlu melintasi folder itu.
var JSZip = require("jszip"); var fs = require("fs"); var zip = new JSZip(); var file_content = fs.readFileSync('archive/a.txt'); zip.file("a.txt",file_content); var data = fs.readFileSync("archive/img/pic.jpeg"); zip.file("img/pic.jpeg", data, {base64: true}); var zipfolder = zip.generate({type:"nodebuffer"}); fs.writeFile("jszip.zip", zipfolder, function(err) { if (err) throw err; });
Terdapat juga kaedah folder dalam JSZip, tetapi ia hanya digunakan untuk menukar laluan maya dalam objek zip Contohnya, zip.folder("img").file('a.txt') adalah untuk menambah subdirektori img ke zip , buat a.txt di bawah, kesannya bersamaan dengan zip.file("img/a.txt"). Ia juga harus diperhatikan di sini bahawa kandungan fail perlu ditambah secara manual Jika ia hanya zip.file("a.txt"); ia hanya mencipta fail txt dengan kandungan kosong dalam objek zip, dan ia sahaja wujud dalam memori , ia perlu ditulis pada fail sebelum ia sebenarnya disimpan ke cakera.
Kebaikan dan keburukan:
1. Ia lebih sesuai untuk menukar beberapa data yang diterima dalam masa nyata kepada zip. 2. Menyusahkan untuk mengendalikan folder sedia ada Anda perlu menambah kandungan pada objek zip satu demi satu dan kemudian menukarnya menjadi fail.
3. Banyak pengekodan memerlukan perhatian.
4. Hanya fungsi mampatan.
3. Gunakan arkib dan nyahzip
Kombinasi ini adalah yang terakhir saya gunakan. Ia lebih dipercayai dan lebih mudah digunakan. Pengarkib sangat berkuasa dan menyokong format tar zip Anda hanya perlu menyediakan laluan untuk memampatkan folder yang sedia ada. Mampatan:
var fs = require('fs'); var archiver = require('archiver'); var output = fs.createWriteStream('archiver-unzip.zip'); var archive = archiver('zip'); archive.on('error', function(err){ throw err; }); archive.pipe(output); archive.bulk([ { src: ['archiver/**']} ]); archive.finalize();
Nyahzip:
var fs = require("fs"); var unzip = require("unzip"); fs.createReadStream('archiver-unzip.zip').pipe(unzip.Extract({ path: 'unarchive' }));
Kebaikan dan keburukan:
1. Ia telah dicuba untuk masa yang lama dan mempunyai lebih sedikit pepijat.
2. Mudah digunakan, tidak perlu merentasi folder.
3. Mereka hanya menyediakan pemampatan atau penyahmampatan, bukan kedua-dua fungsi. (Jadi adm-zip sebenarnya sangat berguna, tetapi pepijat adalah kecacatan...)
Ini hanyalah sebahagian daripada perpustakaan yang saya temui semalam. Anda dialu-alukan untuk mengesyorkan perpustakaan lain