js服務器解壓文檔介紹內容,js文件怎麼解壓

本文目錄一覽:

壓縮後的JS代碼怎樣解壓縮?

一般壓縮都經過混淆,如果你看到變量名都是A,B,C,D之類的無規則的命名,那就是被混淆過的,一般來說也很難閱讀,就算你 還原了格式。

如果是沒有混淆的,你可以試試用js的格式化工具來重新格式化一下的,比如:

/* 美化:格式化代碼,使之容易閱讀 */

/* 凈化:去掉代碼中多餘的注釋、換行、空格等 */

/* 壓縮:將代碼壓縮為更小體積,便於傳輸 */

/* 解壓:將壓縮後的代碼轉換為人可以閱讀的格式 */

/* 混淆:將代碼的中變量名簡短化以減小體積,但可讀性差,經混淆後的代碼無法還原 */

/* 如果有用,請別忘了推薦給你的朋友: */

/* javascript在線美化、凈化、壓縮、解壓: */

/* 以下是演示代碼 */

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

iis。關於js調用並打開服務器上的word文檔

1、word的打開是獨佔的,你不能同時對一個程序多次打開,所以理論上你的程序只能一個人用

2、這也不是js能做得了得,js控制不了服務器端

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 如何讀取xml文檔內容

先判斷瀏覽器,然後讀取xml數據就可以了

//判斷不同的瀏覽器

function InitMf()

{

var mf_change=false;

try {

mf_change = new ActiveXObject(“Msxml2.XMLHTTP”);

} catch (e) {

try {

mf_change = new ActiveXObject(“Microsoft.XMLHTTP”);

} catch (E) {

mf_change = false;

}

}

if (!mf_change typeof XMLHttpRequest!=’undefined’) {

mf_change = new XMLHttpRequest();

}

return mf_change;

}

讀取數據

var xmlHttp = InitMf();

var HTML = “”;

//獲得xml文件

xmlHttp.open(“GET”, xmlfile+”?”+Math.random(), true);

// 設置處理服務器的JS函數,函數又 xmlHttp.onreadystatechange來確定

xmlHttp.onreadystatechange=function() {

//alert(xmlHttp.status);

if (xmlHttp.readyState==4 xmlHttp.status==200) {

//ajax的XML傳輸的解析。獲取解析的數據

var xml = xmlHttp.responseXML;

var node = xml.getElementsByTagName(“item”);//獲得總結點

for(var i = 0 ; i node.length ; i++){

var str_t = “”;

var str_d = “”;

var menuHTML = “”;

var elem = node[i];

//下面開始獲得子節點數據,當然可以繼續循環,獲得更下面的節點

var title = elem.getElementsByTagName(“title”)[0].textContent != undefined ? elem.getElementsByTagName(“title”)[0].textContent : elem.getElementsByTagName(“title”)[0].text;

這些只是部分代碼,不過已經足夠了

JQuery,JS 讀取遠程服務器的txt文件內容

注意幾點:

1 一個是端口號,注意你自己設置的是哪個端口號

2 第二個是要保證txt格式中的文件是json格式 ,不然會沒有返回值。

3 不要在本地直接打開 ,放在本地服務器上,apache之類的

nodejs實現一個word文檔解析器思路詳解

之前項目里遇到一個需求,需要前端上傳一個word文檔,然後後端提取出該文檔的指定位置的內容並保存。這裡後端用的是nodejs,開始接到這個需求,發現無從下手,主要是沒有處理過word這種類型的文檔,怎麼解析?

Excel倒是有相關的庫可以用,而且很簡單

思路

搜索了好一會兒,在npm上發現了一個叫做

adm-zip

的包,這個包可以解壓縮word文檔,原來word文檔也是可以解壓縮的,之前一直不知道,通過如下代碼就可以將word文檔解壓縮,並進一步提取內容

var

admZip

=

require(‘adm-zip’);

const

zip

=

new

admZip(‘test.docx’);

//將該docx解壓到指定文件夾result下

zip.extractAllTo(“./result”,

/*overwrite*/true);

首先我們新建一個docx文檔,內容如下

然後運行上述代碼進行解壓縮,得到如下的文件,由下圖可以看出生成了好幾個文件夾,word的內容其實是在word文件夾里的document.xml文件內(這裡解壓縮後其實源文件還在,並沒有消失)

進入word文件夾後的內容

我們繼續打開document.xml文件來一探究竟裏面到底是啥?注意要用瀏覽器直接打開,如果用ide打開顯示出的所有內容都在一行,無法閱讀!

上圖只是word文檔的一部分,會發現word文檔內看着只有幾段文字,但是xml中卻是長篇大論,仔細分析下也很正常,xml全稱可擴展標記語言,其被設計為傳輸和存儲數據,它僅僅是一個純文本的表示,而word中內容格式千變萬化,肯定需要一種方法來有效描述這些內容的格式,因此採用了xml來描述

我們嘗試一下將

測試文檔

四個字加粗變色傾斜字體,如下圖

然後再進行解壓縮,得到docuemnt.xml並查看對應的內容,如下

這就很明顯了,

w:b/

表示文字加粗,

w:i/

表示文字傾斜,

w:color

表示文字的顏色,所以這麼4個字就需要這幾行xml來描述,因此長篇大論的xml也就不足為奇

提取內容

上面說到了xml僅僅是一個文本的表示,我們可以用如下代碼讀取整個xml的內容,結果是一個

string

var

contentXml

=

zip.readAsText(“word/document.xml”);

接下來是重點,如何提取我們想要的內容呢,答案是正則表達式,首先我們得分析一下word文檔的結構,word文檔其實是由叫做

Paragraph

的段落所構成,在vb中可以很輕鬆的獲取並修改段落,官網傳送門點此

那麼到底怎麼樣才是一個

Paragraph

呢,其實很簡單,仔細觀察word文檔,見到下圖中的小箭頭了么,每個小箭頭前面的內容就是一個段落,那麼下圖中一共有16個

Paragraph

,當然有些段落是空的,沒有任何內容

我們再來研究xml的結構,收起展開的xml,如下圖,發現

w:p/w:p

這麼個標籤就是表示的一個段落,中間還有些

w:p

藏在表格內,這麼一看錶格前面3個段落,後面3個段落,和上圖是對應的

因此,

我們就可以提取出每個段落的文本並返回一個數組,每一項就是一個段落的內容

,這樣就能夠完整的解析出整個word的內容,關鍵在於如何提取每個

w:p

的內容,我們繼續展開一個

w:p

進行觀察,如下圖,發現內容雖多,其實文本都保存在

w:t

中間,因此思路就清晰了,

首先用正則表達式提取出所有w:p的內容,再針對每個w:p的內容,進行進一步正則提取,提取出其裏面所有w:t的內容,並拼接在一起構成一個段落的總內容

具體代碼

下面是具體的提取代碼

//參數是word文件名,第二個參數是回調錶示解析完成

var

parser

=

function

parseWordDocument(absoluteWordPath,callback){

//返回內容的數組

var

resultList

=

[];

//如果文件存在

fs.exists(absoluteWordPath,

function(exists){

if(exists){

//解壓縮

const

zip

=

new

admZip(absoluteWordPath);

//將document.xml(解壓縮後得到的文件)讀取為text內容

var

contentXml

=

zip.readAsText(“word/document.xml”);

//正則匹配出對應的w:p裏面的內容,方法是先匹配w:p,再匹配裏面的w:t,將匹配到的加起來即可

//注意?表示非貪婪模式(儘可能少匹配字符),否則只能匹配到一個w:p/w:p

var

matchedWP

=

contentXml.match(/w:p.*?.*?\/w:p/gi);

//繼續匹配每個w:p/w:p裏面的w:t,這裡必須判斷matchedWP存在否則報錯

if(matchedWP){

matchedWP.forEach(function(wpItem){

//注意這裡w:t的匹配,有可能是w:t

xml:space=”preserve”這種格式,需要特殊處理

var

matchedWT

=

wpItem.match(/(w:t.*?\/w:t)|(w:t\s.[^]*?.*?\/w:t)/gi);

var

textContent

=

”;

if(matchedWT){

matchedWT.forEach(function(wtItem){

//如果不是w:t

xml:space=”preserve”格式

if(wtItem.indexOf(‘xml:space’)===-1){

textContent+=wtItem.slice(5,-6);

}else{

textContent+=wtItem.slice(26,-6);

}

});

resultList.push(textContent)

}

});

//解析完成

callback(resultList)

}

}else{

callback(resultList)

}

});

};

注意一下如果段落前有空格,那麼

w:t

的格式是不同的,如下,多了這個space描述,所以需要特殊處理

代碼量其實很少,關鍵在於正則的編寫,上述docx文檔提取後的輸出結果如下

最後我把這個工具寫成了一個npm包,地址點這裡

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/154858.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-16 14:14
下一篇 2024-11-16 14:14

相關推薦

發表回復

登錄後才能評論