기존 archive 및 unarchive 폴더 전체를 프로젝트에서 사용해야 합니다. 해결책을 찾을 때 주로 adm-zip, JSZip, archiver 등 일부 인기 있는 라이브러리를 사용해 보았습니다.
1.adm-zip
을 사용하세요.
adm-zip은 하나 이상의 파일 또는 전체 폴더의 보관 및 보관 해제 기능을 지원하므로 사용이 매우 간단하고 편리합니다.
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);
장점과 단점:
1. 압축과 압축 해제를 동시에 구현하며, 경로만 제공되면 기존 파일이나 폴더에 대해 작업이 가능하며 많은 인터페이스를 구현하고 사용이 쉽습니다.
2. 자체적으로 버그가 있는 경우가 있습니다. 압축을 푼 파일을 원본 파일로 복원할 수 없는 경우가 있습니다. 시간이 지남에 따라 이러한 버그가 수정되기를 바랍니다.
2.JSZip
을 사용하세요.
이 라이브러리를 사용할 때 zip 객체에 파일을 하나씩 추가해야 하고, 내용을 수동으로 추가한 후 파일 쓰기 작업을 사용하여 메모리에 있는 zip 객체를 물리적 저장소로 변환해야 합니다. 따라서 전체 폴더에 대한 것이라면 매우 번거롭고 폴더를 순회해야 합니다.
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; });
JSZip에도 폴더 방식이 있지만 zip 객체 내부의 가상 경로를 전환하는 데만 사용됩니다. 예를 들어 zip.folder("img").file('a.txt') 를 추가하는 것입니다. img 하위 디렉터리를 zip 에 추가하고 아래에 a.txt를 생성하면 효과는 zip.file("img/a.txt")과 동일합니다. 여기서는 파일의 내용을 수동으로 추가해야 한다는 점에 유의해야 합니다. zip.file("a.txt")일 경우 zip 개체에 빈 내용이 포함된 txt 파일만 생성됩니다. 메모리에 존재하는 경우 실제로 디스크에 저장되기 전에 파일에 기록되어야 합니다.
장점과 단점:
1. 실시간으로 수신된 일부 데이터를 zip으로 변환하는 데 더 적합합니다. 2. 기존 폴더를 조작하는 방식이 불편합니다. zip 개체에 내용을 하나씩 추가한 후 파일로 변환해야 합니다.
3. 코딩에 주의가 필요한 부분이 많습니다.
4. 압축 기능만 있습니다.
3. archiver를 사용하고 압축 해제
이 조합은 제가 사용한 마지막 조합입니다. 아카이버는 매우 강력하며 기존 폴더를 압축하려면 경로만 제공하면 됩니다. 압축:
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();
압축해제:
var fs = require("fs"); var unzip = require("unzip"); fs.createReadStream('archiver-unzip.zip').pipe(unzip.Extract({ path: 'unarchive' }));
장점과 단점:
1. 오랫동안 시도되어 버그가 적습니다.
2. 사용하기 쉽고 폴더를 이동할 필요가 없습니다.
3. 압축이나 압축 해제만 제공하며 두 기능을 모두 제공하지는 않습니다. (그래서 adm-zip은 사실 매우 유용하지만 버그가 단점이군요...)
어제 찾은 도서관 중 일부입니다. 다른 도서관도 추천해 주세요