本發(fā)明涉及信息通信技術(shù)領(lǐng)域,特別涉及一種文件下載方法及裝置。
背景技術(shù):
隨著網(wǎng)頁(yè)開發(fā)技術(shù)的發(fā)展,Ajax(Asynchronous JavaScript And XML,異步JavaScript和XML)作為一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開發(fā)技術(shù),已被廣泛使用。
目前,基于Ajax創(chuàng)建的網(wǎng)頁(yè)應(yīng)用主要通過(guò)瀏覽器從服務(wù)器中下載文件,即通過(guò)瀏覽器向服務(wù)器發(fā)送攜帶URL(Uniform Resoure Locator,統(tǒng)一資源定位符)地址的下載請(qǐng)求,使得服務(wù)器根據(jù)接收到的URL地址將該URL地址的目標(biāo)文件轉(zhuǎn)換為特定格式的數(shù)據(jù)后發(fā)送至中間件容器,比如,Apache、Tomcat等,中間件容器將特定格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)文件后傳輸至瀏覽器,實(shí)現(xiàn)從服務(wù)器中下載文件。
可見,傳統(tǒng)的基于Ajax創(chuàng)建的網(wǎng)頁(yè)應(yīng)用從服務(wù)器下載文件時(shí)依賴于中間件容器,中間件容器的性能直接影響目標(biāo)文件的下載情況,文件下載的工作效率較低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種文件下載方法及裝置,可提高文件下載的工作效率。
第一方面,本發(fā)明實(shí)施例提供了一種文件下載方法,包括:
S0:預(yù)先設(shè)置基于Ajax技術(shù)創(chuàng)建的XMLHttpRequest對(duì)象的數(shù)據(jù)請(qǐng)求格式為二進(jìn)制數(shù)據(jù);
S1:利用XMLHttpRequest對(duì)象向外部服務(wù)器發(fā)送對(duì)應(yīng)目標(biāo)文件的數(shù)據(jù)請(qǐng)求;
S2:接收外部服務(wù)器根據(jù)所述數(shù)據(jù)請(qǐng)求發(fā)送的對(duì)應(yīng)目標(biāo)文件的二進(jìn)制數(shù)據(jù);
S3:解析所述二進(jìn)制數(shù)據(jù)以形成目標(biāo)文件;
S4:創(chuàng)建對(duì)應(yīng)所述目標(biāo)文件的數(shù)據(jù)地址;
S5:接收對(duì)應(yīng)所述數(shù)據(jù)地址的觸發(fā)指令,將所述數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件存儲(chǔ)至對(duì)應(yīng)所述觸發(fā)指令的目標(biāo)地址。
進(jìn)一步的,
所述將所述數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件存儲(chǔ)至對(duì)應(yīng)所述觸發(fā)指令的目標(biāo)地址,進(jìn)一步包括:
顯示所述數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件。
進(jìn)一步的,
所述預(yù)先設(shè)置基于Ajax技術(shù)創(chuàng)建的XMLHttpRequest對(duì)象的數(shù)據(jù)請(qǐng)求格式為二進(jìn)制數(shù)據(jù),進(jìn)一步包括:
預(yù)先設(shè)置基于HTML5的BLOB(binary large object,二進(jìn)制大對(duì)象)對(duì)象;
所述解析所述二進(jìn)制數(shù)據(jù)以形成目標(biāo)文件,包括:
根據(jù)所述BLOB對(duì)象解析所述二進(jìn)制數(shù)據(jù)以形成目標(biāo)文件。
進(jìn)一步的,
所述解析所述二進(jìn)制數(shù)據(jù)以形成目標(biāo)文件,包括:
根據(jù)所述二進(jìn)制數(shù)據(jù)構(gòu)建類型化數(shù)組;
將所述類型化數(shù)組轉(zhuǎn)換為二進(jìn)制數(shù)組;
解析所述二進(jìn)制數(shù)組以形成目標(biāo)文件。
進(jìn)一步的,
所述預(yù)先設(shè)置基于Ajax技術(shù)創(chuàng)建的XMLHttpRequest對(duì)象的數(shù)據(jù)請(qǐng)求格式為二進(jìn)制數(shù)據(jù),進(jìn)一步包括:
預(yù)先設(shè)置URL.createObjectURL模塊;
所述創(chuàng)建對(duì)應(yīng)所述目標(biāo)文件的數(shù)據(jù)地址,包括:
根據(jù)所述URL.createObjectURL模塊創(chuàng)建對(duì)應(yīng)所述目標(biāo)文件的數(shù)據(jù)地址。
第二方面,本發(fā)明實(shí)施例提供了一種文件下載裝置,包括:
設(shè)置模塊,用于預(yù)先設(shè)置基于Ajax技術(shù)創(chuàng)建的XMLHttpRequest對(duì)象的數(shù)據(jù)請(qǐng)求格式為二進(jìn)制數(shù)據(jù);
所述XMLHttpRequest對(duì)象,用于向外部服務(wù)器發(fā)送對(duì)應(yīng)目標(biāo)文件的數(shù)據(jù)請(qǐng)求;
數(shù)據(jù)接收模塊,用于接收外部服務(wù)器根據(jù)所述數(shù)據(jù)請(qǐng)求發(fā)送的對(duì)應(yīng)目標(biāo)文件的二進(jìn)制數(shù)據(jù);
數(shù)據(jù)解析模塊,用于解析所述二進(jìn)制數(shù)據(jù)以形成目標(biāo)文件;
地址創(chuàng)建模塊,用于創(chuàng)建對(duì)應(yīng)所述目標(biāo)文件的數(shù)據(jù)地址;
處理模塊,用于接收對(duì)應(yīng)所述數(shù)據(jù)地址的觸發(fā)指令,將所述數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件存儲(chǔ)至對(duì)應(yīng)所述觸發(fā)指令的目標(biāo)地址。
進(jìn)一步的,
所述處理模塊,進(jìn)一步用于顯示所述數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件。
進(jìn)一步的,
所述設(shè)置模塊,進(jìn)一步用于預(yù)先設(shè)置基于HTML5的BLOB對(duì)象;
所述數(shù)據(jù)解析模塊,用于根據(jù)所述BLOB對(duì)象解析所述二進(jìn)制數(shù)據(jù)以形成目標(biāo)文件。
進(jìn)一步的,所述數(shù)據(jù)解析模塊,包括:
第一轉(zhuǎn)換子單元,用于根據(jù)所述二進(jìn)制數(shù)據(jù)構(gòu)建類型化數(shù)組;
第二轉(zhuǎn)換子單元,用于將所述類型化數(shù)組轉(zhuǎn)換為二進(jìn)制數(shù)組;
解析子單元,用于解析所述二進(jìn)制數(shù)組以形成目標(biāo)文件。
進(jìn)一步的,
所述設(shè)置模塊,進(jìn)一步用于預(yù)先設(shè)置URL.createObjectURL模塊;
所述地址創(chuàng)建模塊,用于根據(jù)所述URL.createObjectURL模塊創(chuàng)建對(duì)應(yīng)所述目標(biāo)文件的數(shù)據(jù)地址。
本發(fā)明實(shí)施例提供了一種文件下載方法及裝置,通過(guò)預(yù)先設(shè)置基于Ajax技術(shù)創(chuàng)建的XMLHttpRequest對(duì)象的數(shù)據(jù)請(qǐng)求格式為二進(jìn)制數(shù)據(jù),通過(guò)XMLHttpRequest對(duì)象向服務(wù)器發(fā)送對(duì)應(yīng)目標(biāo)文件的數(shù)據(jù)請(qǐng)求,將服務(wù)器發(fā)送的對(duì)應(yīng)目標(biāo)文件的二進(jìn)制數(shù)據(jù)解析為目標(biāo)文件,并創(chuàng)建對(duì)應(yīng)該目標(biāo)文件的數(shù)據(jù)地址,即可根據(jù)相應(yīng)的觸發(fā)指令將數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件存儲(chǔ)至對(duì)應(yīng)該觸發(fā)指令的目標(biāo)地址下,實(shí)現(xiàn)下載目標(biāo)文件;可見,本發(fā)明提供的技術(shù)方案中,不再利用中間件容器從服務(wù)器獲取對(duì)應(yīng)目標(biāo)文件的原始數(shù)據(jù),并解析原始數(shù)據(jù)以形成目標(biāo)文件后發(fā)送到相應(yīng)的文件下載裝置,即文件下載過(guò)程中不再依賴于中間件容器,可提高文件下載的工作效率。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一實(shí)施例提供的一種文件下載方法的流程圖;
圖2是本發(fā)明一實(shí)施例提供的另一種文件下載方法的流程圖;
圖3是本發(fā)明一實(shí)施例提供的一種文件下載裝置的結(jié)構(gòu)圖;
圖4是本發(fā)明一實(shí)施例提供的另一種文件下載裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例,基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
如圖1所示,本發(fā)明實(shí)施例提供了一種文件下載方法,包括:
S0:預(yù)先設(shè)置基于Ajax技術(shù)創(chuàng)建的XMLHttpRequest對(duì)象的數(shù)據(jù)請(qǐng)求格式為二進(jìn)制數(shù)據(jù);
S1:利用XMLHttpRequest對(duì)象向外部服務(wù)器發(fā)送對(duì)應(yīng)目標(biāo)文件的數(shù)據(jù)請(qǐng)求;
S2:接收外部服務(wù)器根據(jù)所述數(shù)據(jù)請(qǐng)求發(fā)送的對(duì)應(yīng)目標(biāo)文件的二進(jìn)制數(shù)據(jù);
S3:解析所述二進(jìn)制數(shù)據(jù)以形成目標(biāo)文件;
S4:創(chuàng)建對(duì)應(yīng)所述目標(biāo)文件的數(shù)據(jù)地址;
S5:接收對(duì)應(yīng)所述數(shù)據(jù)地址的觸發(fā)指令,將所述數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件存儲(chǔ)至對(duì)應(yīng)所述觸發(fā)指令的目標(biāo)地址。
本發(fā)明上述實(shí)施例中,通過(guò)預(yù)先設(shè)置基于Ajax技術(shù)創(chuàng)建的XMLHttpRequest對(duì)象的數(shù)據(jù)請(qǐng)求格式為二進(jìn)制數(shù)據(jù),通過(guò)XMLHttpRequest對(duì)象向服務(wù)器發(fā)送對(duì)應(yīng)目標(biāo)文件的數(shù)據(jù)請(qǐng)求,將服務(wù)器發(fā)送的對(duì)應(yīng)目標(biāo)文件的二進(jìn)制數(shù)據(jù)解析為目標(biāo)文件,并創(chuàng)建對(duì)應(yīng)該目標(biāo)文件的數(shù)據(jù)地址,即可根據(jù)相應(yīng)的觸發(fā)指令將數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件存儲(chǔ)至對(duì)應(yīng)該觸發(fā)指令的目標(biāo)地址下,實(shí)現(xiàn)下載目標(biāo)文件;可見,本發(fā)明提供的技術(shù)方案中,不再利用中間件容器從服務(wù)器獲取對(duì)應(yīng)目標(biāo)文件的原始數(shù)據(jù),并解析原始數(shù)據(jù)以形成目標(biāo)文件后發(fā)送到相應(yīng)的文件下載裝置,即文件下載過(guò)程中不再依賴于中間件容器,可提高文件下載的工作效率。
進(jìn)一步的,為了實(shí)現(xiàn)對(duì)獲取的目標(biāo)文件進(jìn)行顯示,本發(fā)明一個(gè)優(yōu)選實(shí)施例中,所述將所述數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件存儲(chǔ)至對(duì)應(yīng)所述觸發(fā)指令的目標(biāo)地址,進(jìn)一步包括:
顯示所述數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件。
進(jìn)一步的,為了實(shí)現(xiàn)對(duì)服務(wù)器發(fā)送的二進(jìn)制大數(shù)據(jù)直接進(jìn)行解析,本發(fā)明一個(gè)優(yōu)選實(shí)施例中,所述預(yù)先設(shè)置基于Ajax技術(shù)創(chuàng)建的XMLHttpRequest對(duì)象的數(shù)據(jù)請(qǐng)求格式為二進(jìn)制數(shù)據(jù),進(jìn)一步包括:
預(yù)先設(shè)置基于HTML5的BLOB對(duì)象;
所述解析所述二進(jìn)制數(shù)據(jù)以形成目標(biāo)文件,包括:
根據(jù)所述BLOB對(duì)象解析所述二進(jìn)制數(shù)據(jù)以形成目標(biāo)文件。
本發(fā)明上述實(shí)施例中,XMLHttpRequest level 2標(biāo)準(zhǔn)化以及HTML5的新API(Application Programming Interface,應(yīng)用程序編程接口)中完善了對(duì)數(shù)據(jù)地址Data URL的支持,Data URL用于存儲(chǔ)BLOB對(duì)象封裝的二進(jìn)制數(shù)據(jù),即存儲(chǔ)目標(biāo)文件;這里可以使用Ajax技術(shù)實(shí)現(xiàn)對(duì)二進(jìn)制數(shù)據(jù)的請(qǐng)求,并使用HTML5新添加的BLOB對(duì)象實(shí)現(xiàn)對(duì)服務(wù)器發(fā)送的二進(jìn)制大數(shù)據(jù)進(jìn)行解析以形成目標(biāo)文件。
應(yīng)當(dāng)理解的是,BLOB對(duì)象解析二進(jìn)制大數(shù)據(jù)后會(huì)形成一個(gè)新的BLOB對(duì)象,新的BLOB對(duì)象中封裝了對(duì)應(yīng)目標(biāo)文件的二進(jìn)制大數(shù)據(jù),新的BLOB對(duì)象即用二進(jìn)制數(shù)據(jù)表征的目標(biāo)文件。
進(jìn)一步的,為了方便用戶根據(jù)自身業(yè)務(wù)需求對(duì)服務(wù)器返回的二進(jìn)制數(shù)據(jù)進(jìn)行自由處理,包括自由組織下載目標(biāo)文件以及針對(duì)目標(biāo)文件進(jìn)行相應(yīng)修改,本發(fā)明一個(gè)優(yōu)選實(shí)施例中,所述解析所述二進(jìn)制數(shù)據(jù)以形成目標(biāo)文件,包括:
根據(jù)所述二進(jìn)制數(shù)據(jù)構(gòu)建類型化數(shù)組;
將所述類型化數(shù)組轉(zhuǎn)換為二進(jìn)制數(shù)組;
解析所述二進(jìn)制數(shù)組以形成目標(biāo)文件。
進(jìn)一步的,本發(fā)明一個(gè)優(yōu)選實(shí)施例中,所述預(yù)先設(shè)置基于Ajax技術(shù)創(chuàng)建的XMLHttpRequest對(duì)象的數(shù)據(jù)請(qǐng)求格式為二進(jìn)制數(shù)據(jù),進(jìn)一步包括:
預(yù)先設(shè)置URL.createObjectURL模塊;
所述創(chuàng)建對(duì)應(yīng)所述目標(biāo)文件的數(shù)據(jù)地址,包括:
根據(jù)所述URL.createObjectURL模塊創(chuàng)建對(duì)應(yīng)所述目標(biāo)文件的數(shù)據(jù)地址。
本發(fā)明上述實(shí)施例中,URL.createObjectURL模塊可用于記錄數(shù)據(jù)地址的創(chuàng)建規(guī)則,以便在BLOB對(duì)象對(duì)二進(jìn)制大數(shù)據(jù)進(jìn)行封裝以形成對(duì)應(yīng)目標(biāo)文件的新的BLOB對(duì)象時(shí),根據(jù)URL.createObjectURL模塊記錄的數(shù)據(jù)地址創(chuàng)建規(guī)則創(chuàng)建用于存儲(chǔ)新的BLOB對(duì)象的數(shù)據(jù)地址Data URL。
本發(fā)明上述實(shí)施例中,可以將XMLHttpRequest對(duì)象的responseType設(shè)為arraybuffer,即根據(jù)arraybuffer將對(duì)應(yīng)目標(biāo)文件的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為類型化數(shù)組,再使用Unit8Array對(duì)類型化數(shù)組arraybuffer進(jìn)行封裝,即可將接收到的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)組,然后根據(jù)URL.createObjectURL模塊記錄的數(shù)據(jù)地址創(chuàng)建規(guī)則將該二進(jìn)制數(shù)組轉(zhuǎn)換為數(shù)據(jù)地址Data URL,即利用數(shù)據(jù)地址Data URL存儲(chǔ)對(duì)應(yīng)目標(biāo)文件的二進(jìn)制數(shù)組,再遍歷數(shù)據(jù)地址Data URL下存儲(chǔ)的二進(jìn)制數(shù)組以對(duì)二進(jìn)制數(shù)組進(jìn)行進(jìn)一步的處理,比如,修改Data URL下存儲(chǔ)的二進(jìn)制數(shù)組,可實(shí)現(xiàn)對(duì)形成的目標(biāo)文件進(jìn)行相應(yīng)修改。
如圖2所示,本發(fā)明實(shí)施例提供了一種文件下載方法,以通過(guò)基于HTML5的BLOB對(duì)象解析二進(jìn)制大數(shù)據(jù)為例,包括:
步驟201,基于Ajax技術(shù)創(chuàng)建XMLHttpRequest對(duì)象。
本發(fā)明實(shí)施例中,XMLHttpRequest對(duì)象用于在后臺(tái)與服務(wù)器交換數(shù)據(jù),幾乎所有的瀏覽器(比如,IE7+、Firefox、Chrome、Safari以及Opera)均支持XMLHttpRequest對(duì)象,這里,即在上述瀏覽器中創(chuàng)建XMLHttpRequest對(duì)象。
步驟202,將XMLHttpRequest對(duì)象的ResponseType設(shè)置為二進(jìn)制數(shù)據(jù)。
這里,即將XMLHttpRequest對(duì)象與服務(wù)器進(jìn)行數(shù)據(jù)交換的數(shù)據(jù)格式設(shè)置為二進(jìn)制數(shù)據(jù)格式。
步驟203,設(shè)置基于HTML5的BLOB對(duì)象,以及,URL.createObjectURL模塊。
本發(fā)明實(shí)施例中,HTML5新添加的BLOB對(duì)象可用于對(duì)服務(wù)器發(fā)送的二進(jìn)制大數(shù)據(jù)進(jìn)行解析;URL.createObjectURL模塊可用于記錄數(shù)據(jù)地址的創(chuàng)建規(guī)則,以便在BLOB對(duì)象對(duì)二進(jìn)制大數(shù)據(jù)進(jìn)行封裝以形成對(duì)應(yīng)目標(biāo)文件的新的BLOB對(duì)象時(shí),根據(jù)URL.createObjectURL模塊記錄的數(shù)據(jù)地址創(chuàng)建規(guī)則創(chuàng)建用于存儲(chǔ)新的BLOB對(duì)象的數(shù)據(jù)地址Data URL。
步驟204,利用XMLHttpRequest對(duì)象向服務(wù)器發(fā)送對(duì)應(yīng)目標(biāo)文件的數(shù)據(jù)請(qǐng)求。
本發(fā)明實(shí)施例中,該數(shù)據(jù)請(qǐng)求攜帶目標(biāo)文件的路徑信息,并指示服務(wù)器將對(duì)應(yīng)該路徑信息的目標(biāo)文件轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)后發(fā)送至XMLHttpRequest對(duì)象對(duì)應(yīng)的瀏覽器或文件下載裝置中。
步驟205,接收服務(wù)器發(fā)送的對(duì)應(yīng)目標(biāo)文件的二進(jìn)制數(shù)據(jù)。
步驟206,根據(jù)BLOB對(duì)象解析二進(jìn)制數(shù)據(jù),以形成新的BLOB對(duì)象。
應(yīng)當(dāng)理解的是,BLOB對(duì)象解析二進(jìn)制數(shù)據(jù)后會(huì)形成一個(gè)新的BLOB對(duì)象,新的BLOB對(duì)象中封裝了對(duì)應(yīng)目標(biāo)文件的二進(jìn)制數(shù)據(jù),新的BLOB對(duì)象即用二進(jìn)制數(shù)據(jù)表征的目標(biāo)文件。
步驟207,根據(jù)URL.createObjectURL模塊創(chuàng)建新的BLOB對(duì)象對(duì)應(yīng)的數(shù)據(jù)地址。
本發(fā)明實(shí)施例中,利用URL.createObjectURL模塊記錄的數(shù)據(jù)地址創(chuàng)建規(guī)則根據(jù)新的BLOB對(duì)象創(chuàng)建一個(gè)數(shù)據(jù)地址Data URL;Data URL的生命僅存在于它被創(chuàng)建的某個(gè)文檔中,Data URL指向新的Blob對(duì)象,即Data URL下存儲(chǔ)新的BLOB對(duì)象。
需要說(shuō)明的是,在需要對(duì)目標(biāo)文件進(jìn)行其他處理時(shí),比如修改目標(biāo)文件時(shí),步驟206中可以將服務(wù)器發(fā)送的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為類型化數(shù)組Arraybuffer,然后利用Unit8Array對(duì)類型化數(shù)組arraybuffer進(jìn)行封裝,即可實(shí)現(xiàn)將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)組;然后利用URL.createObjectURL模塊創(chuàng)建對(duì)應(yīng)該二進(jìn)制數(shù)組的數(shù)據(jù)地址Data URL,即可通過(guò)遍歷該Data URL下的二進(jìn)制數(shù)組以對(duì)二進(jìn)制數(shù)組進(jìn)行相應(yīng)的修改,進(jìn)而實(shí)現(xiàn)修改目標(biāo)文件。
步驟208,接收對(duì)應(yīng)該數(shù)據(jù)地址的觸發(fā)指令。
這里,用戶可通過(guò)瀏覽器發(fā)送對(duì)應(yīng)該數(shù)據(jù)地址Data URL地址的觸發(fā)指令。
步驟209,將數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件存儲(chǔ)至對(duì)應(yīng)該觸發(fā)指令的目標(biāo)地址,并顯示該數(shù)據(jù)地址下的目標(biāo)文件。
本發(fā)明實(shí)施例中,用戶可通過(guò)XMLHttpRequest對(duì)象對(duì)應(yīng)的瀏覽器或裝置實(shí)現(xiàn)對(duì)目標(biāo)文件的下載,以將Data URL地址下存儲(chǔ)的目標(biāo)文件下載到本地的非易失性存儲(chǔ)介質(zhì)或其他目標(biāo)地址;或,利用XMLHttpRequest對(duì)象以來(lái)的瀏覽器或文件下載裝置對(duì)數(shù)據(jù)地址下的目標(biāo)文件進(jìn)行顯示。
如圖3所示,本發(fā)明實(shí)施例提供了一種文件下載裝置,包括:
設(shè)置模塊301,用于預(yù)先設(shè)置基于Ajax技術(shù)創(chuàng)建的XMLHttpRequest對(duì)象302的數(shù)據(jù)請(qǐng)求格式為二進(jìn)制數(shù)據(jù);
所述XMLHttpRequest對(duì)象302,用于向外部服務(wù)器發(fā)送對(duì)應(yīng)目標(biāo)文件的數(shù)據(jù)請(qǐng)求;
數(shù)據(jù)接收模塊303,用于接收外部服務(wù)器根據(jù)所述數(shù)據(jù)請(qǐng)求發(fā)送的對(duì)應(yīng)目標(biāo)文件的二進(jìn)制數(shù)據(jù);
數(shù)據(jù)解析模塊304,用于解析所述二進(jìn)制數(shù)據(jù)以形成目標(biāo)文件;
地址創(chuàng)建模塊305,用于創(chuàng)建對(duì)應(yīng)所述目標(biāo)文件的數(shù)據(jù)地址;
處理模塊306,用于接收對(duì)應(yīng)所述數(shù)據(jù)地址的觸發(fā)指令,將所述數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件存儲(chǔ)至對(duì)應(yīng)所述觸發(fā)指令的目標(biāo)地址。
進(jìn)一步的,為了實(shí)現(xiàn)對(duì)獲取的目標(biāo)文件進(jìn)行顯示,本發(fā)明一個(gè)優(yōu)選實(shí)施例中,所述處理模塊306,進(jìn)一步用于顯示所述數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件。
進(jìn)一步的,為了實(shí)現(xiàn)對(duì)服務(wù)器發(fā)送的二進(jìn)制大數(shù)據(jù)直接進(jìn)行解析,本發(fā)明一個(gè)優(yōu)選實(shí)施例中,所述設(shè)置模塊301,進(jìn)一步用于預(yù)先設(shè)置基于HTML5的BLOB對(duì)象;
所述數(shù)據(jù)解析模塊304,用于根據(jù)所述BLOB對(duì)象解析所述二進(jìn)制數(shù)據(jù)以形成目標(biāo)文件。
進(jìn)一步的,為了方便用戶根據(jù)自身業(yè)務(wù)需求對(duì)服務(wù)器返回的二進(jìn)制數(shù)據(jù)進(jìn)行自由處理,包括自由組織下載目標(biāo)文件以及針對(duì)目標(biāo)文件進(jìn)行相應(yīng)修改,如圖4所示,本發(fā)明一個(gè)優(yōu)選實(shí)施例中,所述數(shù)據(jù)解析模塊304,包括:
第一轉(zhuǎn)換子單元3041,用于根據(jù)所述二進(jìn)制數(shù)據(jù)構(gòu)建類型化數(shù)組;
第二轉(zhuǎn)換子單元3042,用于將所述類型化數(shù)組轉(zhuǎn)換為二進(jìn)制數(shù)組;
解析子單元3043,用于解析所述二進(jìn)制數(shù)組以形成目標(biāo)文件。
進(jìn)一步的,本發(fā)明一個(gè)優(yōu)選實(shí)施例中,所述設(shè)置模塊301,進(jìn)一步用于預(yù)先設(shè)置URL.createObjectURL模塊;
所述地址創(chuàng)建模塊305,用于根據(jù)所述URL.createObjectURL模塊創(chuàng)建對(duì)應(yīng)所述目標(biāo)文件的數(shù)據(jù)地址。
上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過(guò)程等內(nèi)容,由于與本發(fā)明方法實(shí)施例基于同一構(gòu)思,具體內(nèi)容可參見本發(fā)明方法實(shí)施例中的敘述,此處不再贅述。
本發(fā)明各個(gè)實(shí)施例至少具有如下有益效果:
1、通過(guò)預(yù)先設(shè)置基于Ajax技術(shù)創(chuàng)建的XMLHttpRequest對(duì)象的數(shù)據(jù)請(qǐng)求格式為二進(jìn)制數(shù)據(jù),通過(guò)XMLHttpRequest對(duì)象向服務(wù)器發(fā)送對(duì)應(yīng)目標(biāo)文件的數(shù)據(jù)請(qǐng)求,將服務(wù)器發(fā)送的對(duì)應(yīng)目標(biāo)文件的二進(jìn)制數(shù)據(jù)解析為目標(biāo)文件,并創(chuàng)建對(duì)應(yīng)該目標(biāo)文件的數(shù)據(jù)地址,即可根據(jù)相應(yīng)的觸發(fā)指令將數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件存儲(chǔ)至對(duì)應(yīng)該觸發(fā)指令的目標(biāo)地址下,實(shí)現(xiàn)下載目標(biāo)文件;可見,本發(fā)明提供的技術(shù)方案中,不再利用中間件容器從服務(wù)器獲取對(duì)應(yīng)目標(biāo)文件的原始數(shù)據(jù),并解析原始數(shù)據(jù)以形成目標(biāo)文件后發(fā)送到相應(yīng)的文件下載裝置,即文件下載過(guò)程中不再依賴于中間件容器,可提高文件下載的工作效率。
2、通過(guò)將接收到的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為類型化數(shù)組,并將該類型化數(shù)組轉(zhuǎn)換為二進(jìn)制數(shù)組,并創(chuàng)建用于存儲(chǔ)該二進(jìn)制數(shù)組的數(shù)據(jù)地址,用戶即可通過(guò)遍歷該數(shù)據(jù)地址下的二進(jìn)制數(shù)組以對(duì)數(shù)據(jù)地址下的二進(jìn)制數(shù)組進(jìn)行修改,可實(shí)現(xiàn)根據(jù)用戶需求修改數(shù)據(jù)地址下存儲(chǔ)的目標(biāo)文件。
需要說(shuō)明的是,在本文中,諸如第一和第二之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)······”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同因素。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成,前述的程序可以存儲(chǔ)在計(jì)算機(jī)可讀取的存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)中。
最后需要說(shuō)明的是:以上所述僅為本發(fā)明的較佳實(shí)施例,僅用于說(shuō)明本發(fā)明的技術(shù)方案,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。