❶ javazip壓縮包過大解壓失敗
javazip壓縮包過大解壓失敗的原因:網路傳輸不好導致文件下載損壞、網站提供的RAR壓縮包最初被損壞、使用的下載工具不夠完善。我們可以通過壓縮軟體里的「修復壓縮文件」解決javazip壓縮包過大解壓失敗的問題。
❷ jszip.js遠程讀取一個zip文件
項目用到了jszip.js插件,用於在後台獲取zip文件,前端解壓並將模型進行在線顯示.
官網
jszip的API說明為英文,例子其實也有些模糊.
遠程載入一個文件, 使用官網的例子 :(自行觀看);
這里作為筆記,主要是想說
promise.then(JSZip.loadAsync)
.then(function( zip ){returnzip.file("Hello.txt").async("string");
此處可以返回一個值,返回的值就是下一個.then的實參
})
這里的zip就是讀取到的zip的數據,主要的屬性諸如files就是zip中的文件,可以通過zip.file(filename)的形式將該文件對象進行存儲,但是這里的文件對象其實是一個promise,當我們需要使用的時候可以通過.then 的形式使用
例如: pic.then(function(data){
//data就是該文件的數據,得到data後可以通過使用,這里就需要注意我們在存儲的時候可以通過使用zip.file(filename).async(數據形式)來定義數據的存儲形式,例如base64,blob,arraybuffer,其中base64是圖片的存儲格式,但是是沒有前綴的,必須加相應的前綴才可以顯示.data:image/png;base64;就可以直接賦值給image.src;
})
❸ 壓縮後的JS代碼怎樣解壓縮
一般壓縮都經過混淆,如果你看到變數名都是A,B,C,D之類的無規則的命名,那就是被混淆過的,一般來說也很難閱讀,就算你 還原了格式。
如果是沒有混淆的,你可以試試用js的格式化工具來重新格式化一下的,比如:
/* 美化:格式化代碼,使之容易閱讀 */
/* 凈化:去掉代碼中多餘的注釋、換行、空格等 */
/* 壓縮:將代碼壓縮為更小體積,便於傳輸 */
/* 解壓:將壓縮後的代碼轉換為人可以閱讀的格式 */
/* 混淆:將代碼的中變數名簡短化以減小體積,但可讀性差,經混淆後的代碼無法還原 */
/* 如果有用,請別忘了推薦給你的朋友: */
/* javascript在線美化、凈化、壓縮、解壓:http://tool.lu/js */
/* 以下是演示代碼 */
var Inote = {};
Inote.JSTool = function(options) {
this.options = options || {};
};
Inote.JSTool.prototype = {
_name: 'Javascript工具',
_history: {
'v1.0': ['2011-01-18', 'javascript工具上線'],
'v1.1': ['2012-03-23', '增加混淆功能'],
'v1.2': ['2012-07-21', '升級美化功能引擎'],
'v1.3': ['2014-03-01', '升級解密功能,支持eval,window.eval,window["eval"]等的解密'],
'v1.4': ['2014-08-05', '升級混淆功能引擎'],
'v1.5': ['2014-08-09', '升級js壓縮引擎'],
'v1.6': ['2015-04-11', '升級js混淆引擎']
},
options: {},
getName: function() {return this._name;},
getHistory: function() {
return this._history;}
};
var jstool = new Inote.JSTool();
❹ js怎麼讀取zip文件內容
web前端解壓zip文件有什麼用:
只考慮標准瀏覽器的話, 伺服器只要傳輸壓縮包到客戶端, 節約了帶寬, 而且節約了傳輸時間, 聽起來好像很厲害的說;
如果前端的代碼很多, 而且包含大副的圖片,那麼就可以把js和css和jpg和png等各種數據通過服務端打包成zip傳送到瀏覽器, 瀏覽器負責解壓, css實用動態生成插入到dom中,js也用globalEval直接執行, jpg或者png各種圖片文件由blob流轉化為image, 直接插入到瀏覽器中;
html5支持讀取Blob(二進制大對象, file文件也是繼承了Blob), 並轉化為圖片流或者文字流或者其他流格式, 這也是為什麼瀏覽器可以讀取"application/zip"文件的原因;
要在瀏覽器中解壓zip文件的話需要引入四個js , 因為UnZipArchive.js依賴了zip.js, mime-type.js和jquery.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/UnZipArchive.js"></script></head><body><h2> demo</h2><div> <input type="file" id="file"></div><ul id="dir"> </ul><script> $("#file").change(function (e) { var file = this.files[0]; window.un = new UnZipArchive( file ); un.getData( function() { //獲取所以的文件和文件夾列表; var arr = un.getEntries(); //拼接字元串 var str = ""; for(var i=0; i<arr.length; i++ ) { //點擊li的話直接下載文件; str += "<li onclick=download('"+arr[i]+"')>"+arr[i]+"</li>" }; $("#dir").html( str ); }); }); var download = function ( filename ) { un.download( filename ); };</script></body></html>
UnzioarichiveJS 是自己封裝的, 有任何問題的話請及時反饋
解壓ZIP壓縮包的完整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> <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> <h2> demo </h2> <div> <input type="file" id="file"> </div> <ul id="dir"> </ul> <script> $("#file").change(function (e) { var file = this.files[0]; window.un = new UnZipArchive( file ); un.getData( function() { var arr = un.getEntries(); var str = ""; for(var i=0; i<arr.length; i++ ) { str += "<li onclick=download('"+arr[i]+"')>"+arr[i]+"</li>" }; $("#dir").html( str ); }); }); var download = function ( filename ) { un.download( filename ); }; </script></div><script> zip.workerScriptsPath = "http://gildas-lormeau.github.io/zip.js/demos/"; /** * @desc 解壓縮文件的類; * @return UnZipArchive 的實例; * */ var UnZipArchive = function( blob ) { if( !blob ) { alert("參數不正確, 需要一個Blob類型的參數"); return ; }; if( !(blob instanceof Blob) ) { alert("參數不是Blob類型"); return ; }; function noop() {}; this.entries = {}; this.zipReader = {}; var _this = this; this.length = 0; this.onend = noop; this.onerror = noop; this.onprogress = noop; //創建一個延遲對象; var def = this.defer = new $.Deferred(); zip.createReader( new zip.BlobReader( blob ), function(zipReader) { _this.zipReader = zipReader; zipReader.getEntries(function(entries) { _this.entries = entries; //繼續執行隊列; def.resolve(); }); }, this.error.bind(_this) ); }; /** * @desc 把blob文件轉化為dataUrl; * */ UnZipArchive.readBlobAsDataURL = function (blob, callback) { var f = new FileReader(); f.onload = function(e) {callback( e.target.result );}; f.readAsDataURL(blob); }; $.extend( UnZipArchive.prototype, { /** * @desc 獲取壓縮文件的所有入口; * @return ArrayList; * */ "getEntries" : function() { var result = []; for(var i= 0, len = this.entries.length ; i<len; i++ ) { result.push( this.entries[i].filename ); } return result; }, /** * @desc 獲取文件Entry; * @return Entry * */ "getEntry" : function ( filename ) { var entrie; for(var i= 0, len = this.entries.length ; i<len; i++ ) { if( this.entries[i].filename === filename) { return this.entries[i]; }; } }, /** * @desc 下載文件 * @param filename; * @return void; * */ "download" : function ( filename , cb , runoninit) { var _this = this; this.defer = this.defer.then(function() { var def = $.Deferred(); if(!filename) return ; if(runoninit) { return runoninit(); }; var entry = _this.getEntry( filename ); if(!entry)return; entry.getData(new zip.BlobWriter(zip.getMimeType(entry.filename)), function(data) { if( !cb ) { UnZipArchive.readBlobAsDataURL(data, function( dataUrl ) { var downloadButton = document.createElement("a"), URL = window.webkitURL || window.mozURL || window.URL; downloadButton.href = dataUrl; downloadButton.download = filename; downloadButton.click(); def.resolve( dataUrl ); _this.onend(); }); }else{ cb( data ); def.resolve( data ); } }); return def; }); }, /** * @desc 獲取對應的blob數據; * @param filename 文件名; * @param callback回調, 參數為 blob; * @desc 或者可以直接傳一個函數作為zip解壓縮完畢的回調; * */ "getData" : function ( filename, fn ) { if( typeof filename === "string") { this.download(filename, function( blob ) { fn&&fn( blob ); }); }else if( typeof filename === "function") { this.download("test", null, function( blob ) { filename(); }); }; }, "error" : function() { this.onerror( this ); throw new Error("壓縮文件解壓失敗"); } }); </script></body></html>