JavaScript 實現(xiàn)的 zip 壓縮和解壓縮工具包Zip.js使用詳解
zip.js是什么
zip.js的github項目地址:http://gildas-lormeau.github.io/zip.js/
通過zip.js封裝一個能在網(wǎng)頁端生成zip文件的插件, 直接在網(wǎng)頁中創(chuàng)建包含文件夾和文件的壓縮包,也可以自定義名字并下載;
如何使用:
1:引用zip.js
2:引用jQuery;
3:并引用封裝的ZipArchive.js ,(因為zip.js的api使用起來比較繁瑣,所以自己封裝實現(xiàn)了這個插件)
4:引用mime-types.js;
查看DEMO, 使用方式為:
運行下面代碼
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="http://gildas-lormeau.github.io/zip.js/demos/zip.js"></script>
<script src="http://gildas-lormeau.github.io/zip.js/demos/mime-types.js"></script>
<script src="http://apps.bdimg.com/libs/jquery/1.9.0/jquery.js"></script>
<script src="http://files.cnblogs.com/files/diligenceday/ZipArchive.js"></script>
</head>
<body>
<script>
var z = new ZipArchive;
z.addFile("a/a.txt", "aaaaaaacontent");
z.addFile("aaaa.txt", "aaaaaaaccccc");
z.export("nono");
</script>
</body>
</html>
DEMO在后面:文件下載下來, 文件夾的格式如下:

回到頂部
創(chuàng)建壓縮文件和文件夾的詳細源代碼:
運行下面代碼
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="http://gildas-lormeau.github.io/zip.js/demos/zip.js"></script>
<script src="http://gildas-lormeau.github.io/zip.js/demos/mime-types.js"></script>
<script src="http://apps.bdimg.com/libs/jquery/1.9.0/jquery.js"></script>
<style>
code{
display: block;
padding: 10px;
background: #eee;
}
</style>
</head>
<body>
<div>
<h1>
兼容性
</h1>
<div>
<p>
zip.js可以在所有的chrome瀏覽器和firefox瀏覽器中運行, 可以在safari6和IE10,以及IE10以上運行;
</p>
<p>
如果要在IE9和safari中運行需要兩個設置:
</p>
<code>
1:zip.useWebWorkers == false
</code>
<code>
2:并引用這個JS:https://bitbucket.org/lindenlab/llsd/raw/7d2646cd3f9b/js/typedarray.js
</code>
</div>
</div>
<script>
zip.workerScriptsPath = "http://gildas-lormeau.github.io/zip.js/demos/";
/**
* @desc 壓縮文件;
* @event onprogress, onend, onerror;
* */
var ZipArchive = function() {
function noop() {};
this.name = "未命名文件";
this.zippedBlob = {};
var _this = this;
this.length = 0;
this.onend = noop;
this.onerror = noop;
this.onprogress = noop;
//創(chuàng)建一個延遲對象;
var def = this.defer = new $.Deferred();
zip.createWriter( new zip.BlobWriter("application/zip"), function(zipWriter) {
_this.zipWriter = zipWriter;
//繼續(xù)執(zhí)行隊列;
def.resolve();
}, this.error );
};
ZipArchive.blob = function (filename, content) {
return new Blob([ content ], {
type : zip.getMimeType(filename)
});
};
$.extend( ZipArchive.prototype, {
/**
* @desc 添加文件
* @param String filename為文件的名字;
* @param String content;
* @param Object options 傳參
* 例如:{ level : 0} 壓縮的等級,0 到 9;
* 例如:{ comment : "提示文字" }
* 例如:{ lastModDate : "最后編輯時間" }
* */
"addFile" : function ( filename , content, options) {
var _this = this;
blob = ZipArchive.blob(filename, content);
//為了產(chǎn)生鏈式的效果, 必須把deferrer賦值給新的defer
this.defer = this.defer.then(function() {
var def = $.Deferred();
_this.zipWriter.add(filename, new zip.BlobReader(blob)
,function() { // reader
console.log("addFile success!!");
def.resolve();
//zipWriter.close(callback);
}, function (size, total) { //onend
_this.onend(filename, blob, total);
_this.length += total;
}, function () { //onprogress
_this.onprogress(filename, blob, total);
},options || {
//options
});
return def;
});
},
/**
* @desc 添加文件夾, 我發(fā)現(xiàn)這個文件無法創(chuàng)建;
* @desc 創(chuàng)建文件夾功能不好用, 需要創(chuàng)建文件夾你通過 zipWriter.addFile("directory/filename.txt", blob())創(chuàng)建文件夾和對應文件;;
* */
"_addFolder" : function (foldername , options) {
//創(chuàng)建文件夾功能目前不能用;
//創(chuàng)建文件夾功能不好用, 直接通過 zipWriter.addFile("directory/filename.txt", blob())創(chuàng)建文件夾和文件
return this;
},
"size" : function () {
return this.length;
},
/**
* @desc 獲取blob文件
* */
"get" : function () {
return this.zippedBlob;
},
/**
* @desc 導出為zip文件
* */
"export" : function ( name ) {
name = name || this.name;
var _this = this;
this.defer.then(function() {
_this.zipWriter.close(function( zippedBlob ) {
if( typeof name === "string" || typeof name === "number") {
var downloadButton = document.createElement("a"),
URL = window.webkitURL || window.mozURL || window.URL;
downloadButton.href = URL.createObjectURL( zippedBlob );
downloadButton.download = name + ".zip";
downloadButton.click();
}else{
name( zippedBlob );
};
});
});
},
"error" : function() {
this.onerror( this );
throw new Error("壓縮文件創(chuàng)建失敗");
}
});
</script>
<script>
var z = new ZipArchive;
z.addFile("a/a.txt", "aaaaaaacontent");
z.addFile("aaaa.txt", "aaaaaaaccccc");
z.export("nono");
</script>
</body>
</html>
相關文章
javascript之querySelector和querySelectorAll使用介紹
其實關于querySelector和querySelectorAll的介紹說明很多。在此主要是做個記錄2011-12-12
HTML+CSS+JS實現(xiàn)完美兼容各大瀏覽器的TABLE固定列
本文給大家分享的是使用HTML+CSS+JS實現(xiàn)完美兼容各大瀏覽器的TABLE固定列的方法和示例,非常的實用,特別是在BS架構的企業(yè)級應用,有需要的小伙伴可以參考下。2015-04-04
Javascript實現(xiàn)從小到大的數(shù)組轉換成二叉搜索樹
這篇文章主要介紹了Javascript實現(xiàn)從小到大的數(shù)組轉換成二叉搜索樹的相關資料,需要的朋友可以參考下2017-06-06
webpack5?import動態(tài)導入實現(xiàn)按需加載并給文件統(tǒng)一命名的配置方法
這篇文章主要介紹了webpack5?import動態(tài)導入實現(xiàn)按需加載并給文件統(tǒng)一命名的配置,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-11-11

