亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Web的大文件高效上傳方法①

        2020-03-18 07:55:30阮曉龍李朋楠
        計算機系統(tǒng)應(yīng)用 2020年3期
        關(guān)鍵詞:分片插件線程

        阮曉龍,李朋楠

        1(河南中醫(yī)藥大學(xué) 信息技術(shù)學(xué)院,鄭州 450046)

        2(鄭州祺石信息技術(shù)有限公司,鄭州 450008)

        1 現(xiàn)狀分析

        1.1 應(yīng)用價值

        大文件上傳是Web 應(yīng)用系統(tǒng)中常見的問題[1],盡管HTTP 是TCP 上層的協(xié)議,但是HTTP 協(xié)議本身并不適合處理超大的請求體,文件上傳的穩(wěn)定性存在著很大的問題.如果傳輸過程中因某種異常而中斷,將前功盡棄,同時,若沒有斷點續(xù)傳功能,那文件只能重新上傳,這樣不僅造成帶寬資源的浪費,而且不能保證再次上傳文件就能成功[2].

        目前基于HTTP 協(xié)議的斷點續(xù)傳方案雖然保證大文件上傳過程中的穩(wěn)定性,但是在傳輸效率和安全性方面仍有不足,滿足不了當(dāng)前互聯(lián)網(wǎng)Web 應(yīng)用系統(tǒng)的需求,因此基于Web 的大文件高效上傳方法的研究和實現(xiàn)是Web 應(yīng)用中的重要基礎(chǔ)[3,4].

        1.2 常用技術(shù)

        目前互聯(lián)網(wǎng)中,已經(jīng)存在許多基于Web 上傳文件的方法,文獻[5]中介紹了常用3 種方法如下所示:

        (1)HTML Form

        該方法主要利用HTML 中Form 表單實現(xiàn)簡單的文件上傳.其中表單的提交方式為POST,編碼類型enctype 為“multipart/form-data”.同時Form 表單里還需要包含一個文件框Input,文件框類型(type)應(yīng)為file.通過結(jié)合Javascript、Ajax 等腳本技術(shù),從而實現(xiàn)文件異步上傳、交互等操作.

        (2)RIA 技術(shù)

        RIA 技術(shù)主要是包括Flex、Silverlight、JavaFX等技術(shù),該技術(shù)中最常用的文件上傳插件為SWFUpload.

        RIA 技術(shù)的倡導(dǎo)者為Adobe,其提供了Flex 技術(shù)來使程序員可以用編程的方式生成Flash 內(nèi)容,因此一般常用Flex 技術(shù)開發(fā)文件上傳的客戶端程序.

        同時,與Silverlight、JavaFX 等技術(shù)在運行庫方面比較,Flex 也最是輕量級的.

        (3)插件技術(shù)

        在瀏覽器中也可以使用插件實現(xiàn)文件上傳.雖然可能由于客戶瀏覽器的安全性設(shè)置,導(dǎo)致插件無法運行,但是在學(xué)校內(nèi)網(wǎng)、企業(yè)內(nèi)網(wǎng)等內(nèi)部環(huán)境還是可以考慮使用的.插件技術(shù)主要包括Activex、Applet 等.例如ActiveX 控件,該控件利用Winsock 技術(shù)建立與Web 服務(wù)之間的通信,并讀取上傳文件數(shù)據(jù),再通過Socket 技術(shù)把數(shù)據(jù)以HTTP POST 方式發(fā)送給服務(wù)器.

        此外,文獻[6]中提出了一種文件分塊上傳的方法,使用單線程傳輸,通過固定大小分片可計算得到上傳文件的偏移量,進而較好的實現(xiàn)了大文件的斷點續(xù)傳.文獻[2,7]中指出了一種雙線程傳輸方法,即一個線程傳輸文件內(nèi)容,另一個線程記錄文件內(nèi)容的偏移量,同樣可實現(xiàn)斷點續(xù)傳.這兩種方法雖然可實現(xiàn)斷點續(xù)傳,但是其傳輸效率還有待提高.文獻[8]中通過多線程方式,按線程數(shù)對文件進行分塊,傳輸效率雖然有所提高,但是其每個線程同樣是通過記錄分塊文件的偏移量,來實現(xiàn)斷點續(xù)傳.以上方法均為時序傳輸,一旦中斷再傳,只是從斷點位置繼續(xù)上傳,不能保證已上傳文件內(nèi)容的完整性與正確性.

        1.3 存在問題

        目前大文件上傳常用方法中主要存在以下4 個方面問題.

        (1)單線程上傳

        常用的大文件上傳方法一般采用單一線程進行文件的傳輸,對帶寬的利用率較低、穩(wěn)定性較差,不能較好實現(xiàn)文件傳輸過程中的交互操作.

        (2)斷點不續(xù)傳

        當(dāng)使用簡單上傳功能來進行大文件上傳,如果上傳的過程中出現(xiàn)了異常造成中斷,那么此次上傳失敗,重試必須從文件起始位置上傳.

        (3)安全性不足

        常用的大文件上傳方法在文件上傳前后不做完整性和正確性驗證,或只是簡單的進行文件大小方面的完整性驗證,無法保證文件上傳后還是原來的文件.

        (4)文件重復(fù)上傳

        當(dāng)已成功上傳的文件再次被上傳時,如不能夠有效識別該文件,會使文件再次進行上傳操作,從而造成帶寬、時間資源的浪費.

        2 關(guān)鍵技術(shù)

        本文提出基于Web 的大文件高效上傳方法的研究與實現(xiàn),其中包含7 個關(guān)鍵技術(shù),具體如下.

        2.1 無客戶端值守

        用戶在上傳一個幾百兆、甚至是上千兆的大文件到服務(wù)器上時,通常采用的是FTP 協(xié)議和某些客戶端軟件,從而能較好地支持大文件的上傳以及實現(xiàn)文件斷點續(xù)傳功能.由于HTTP 協(xié)議的超大范圍使用和Web 技術(shù)的本身特點,也涌現(xiàn)了一批Web 上傳大文件的插件[9,10].

        本文提出的方法是基于HTML5 技術(shù)可以采用化整為零的文件上傳方法,可將單個大文件轉(zhuǎn)化為多個小分片文件進行上傳,有效地解決了HTTP 協(xié)議本身并不適合處理超大請求文件問題.

        2.2 多并發(fā)上傳

        在實際工作中,單一的Web 請求往往無法讓網(wǎng)絡(luò)傳輸速率達到飽和狀態(tài)[8],因此采用多并發(fā)的方式進行文件上傳,可以充分利于網(wǎng)絡(luò)帶寬、提高文件傳輸速度[7,11].

        本文采用構(gòu)建線程池的方法,使并發(fā)線程保持在一個合理值,實現(xiàn)了多并發(fā)可控上傳,避免了并發(fā)線程過多且無序控制造成的線程排隊長時等待現(xiàn)象,造成資源空耗的浪費.

        2.3 文件傳輸校驗

        傳統(tǒng)方式下,文件識別校驗方法主要是對文件傳輸前后的MD5 值進行比對[12,13],該方法在針對小文件時可行,但對大文件或超大文件來說,采用該方法在計算MD5 值時就會非常耗費時間,且有可能造成服務(wù)器計算處理失敗而崩潰.

        針對此問題,本文提出同樣可采用化整為零的MD5 計算方法,將單個大文件的MD5 計算,轉(zhuǎn)化為多個小分片文件的MD5 計算,這樣只要確保每個分片的MD5 在上傳前后一致,即可確定在分片有序合并后的文件和原來保持一致[14,15].

        2.4 斷點續(xù)傳

        斷點續(xù)傳是指文件在上傳過程中,如果碰到網(wǎng)絡(luò)故障或其他一些因素,導(dǎo)致文件傳輸中斷.待故障恢復(fù)后,可以接著未上傳部分繼續(xù)上傳,從而節(jié)省上傳文件時間[16].

        本文斷點續(xù)傳不同于其他時序傳輸?shù)臄帱c續(xù)傳,在某一分片首次上傳時,遇到網(wǎng)絡(luò)抖動、高延時等短時網(wǎng)絡(luò)故障,即使該分片傳輸失敗,傳輸并不會立即中斷,而是會繼續(xù)上傳下一個分片,直至網(wǎng)絡(luò)恢復(fù)或最后一個分片上傳結(jié)束.在續(xù)傳過程中,并不是簡單的從中斷的文件偏移位置繼續(xù)上傳,而會逐個校驗分片的上傳結(jié)果,找出傳輸失敗和MD5 不一致的分片進行補充上傳.

        2.5 極速秒傳

        極速秒傳是指當(dāng)服務(wù)器上已經(jīng)存在某個文件,而用戶又要上傳此文件,此時,服務(wù)器則會檢測此文件的特征碼已被收錄,就可直接提示用戶文件已上傳完畢,而免去用戶再次上傳的過程[17,18].

        2.6 文件切片

        要想實現(xiàn)斷點續(xù)傳、多并發(fā)上傳、文件傳輸校驗等技術(shù),關(guān)鍵在于文件分片,而且是在文件上傳前已經(jīng)完成分片.將大文件進行分片傳輸,可以有效地避免文件上傳過程中可能出現(xiàn)的失敗問題[19,20].

        在HTML5 標(biāo)準(zhǔn)制定前,如果實現(xiàn)文件分片,則必須采用某些前端控件來實現(xiàn);從HTML5 標(biāo)準(zhǔn)制定之后,直接可以使用HTML5 相應(yīng)的File API 功能函數(shù),解決文件在Web 前端無插件分片的問題.

        2.7 文件合并

        目前有兩種方法實現(xiàn)對上傳分片文件進行合并,一種是待所有分片傳完之后統(tǒng)一合并,這就需要服務(wù)端將接收到的所有分片進行臨時存儲,最終合并也會消耗較長時間;另一種方法是“邊傳邊合并”[19],服務(wù)端可以直接將上傳過程中接收到文件分片,按順序追加保存至第一個分片文件中,這就不需要存儲臨時文件,且最終所有分片文件上傳完畢同時也完成文件合并操作,減少文件合并消耗時間.

        3 方案設(shè)計

        基于上述大文件上傳方法與關(guān)鍵技術(shù),綜合其優(yōu)缺點,本文提出一種基于Web 的大文件安全高效上傳方案.該方案是基于HTTP 協(xié)議,利用HTML5 的XMLHttpRequest 2 特性[21],采用File API 提供的功能函數(shù),實現(xiàn)無客戶端方式下文件分塊傳輸.并在首傳和續(xù)傳過程中對每一個分片進行MD5 校驗,提高傳輸安全性.同時利用多線程技術(shù),在前端構(gòu)建線程池[22],實現(xiàn)多線程的創(chuàng)建與管理,提高文件傳輸?shù)膸捓寐?進而提升了文件的上傳效率.此外在處理重復(fù)文件上傳時,通過提取文件特征碼,匹配已上傳的文件信息庫,如果匹配成功,則可免去重復(fù)文件上傳過程,節(jié)約帶寬資源及時間成本.其基于Web 的大文件高效上傳方法的邏輯設(shè)計過程如圖1 所示.

        圖1 并發(fā)文件校驗算法流程示意圖

        4 具體實現(xiàn)

        針對文件上傳流程示意圖,基于Javascript 語言對流程中關(guān)鍵步驟進行代碼實現(xiàn),具體如下所示.

        4.1 文件分片

        在前端分片傳輸過程中,分片大小是一定的,分片越小,請求越多,開銷越大;分片越大,靈活度越小,

        分片上傳的優(yōu)勢就會相對越不明顯[6],因此,分片大小可以根據(jù)實際情況設(shè)置一個合適的值[23].

        本文采取的shardSize = 2×1024×1024.初始化start =currentChunk×shardSize;end = start + shardSize >=file.size? file.size :start + shardSize,變量start 表示的是分片的開始節(jié)點,變量end 表示的是分片的終止節(jié)點.條件表達式start + shardSize >= file.size? file.size :start +shardSize,功能是獲取下一個分片文件的終止節(jié)點.其表達式如式(1)所示.其中x代表分片序號currentChunk,取值從0 開始,遞增量為1;y代表分片大小shardSize,是個固定值;z代表整個文件的大小file.size.

        該表達式通過計算起始節(jié)點加分片大小獲取文件上傳傳輸?shù)慕K止結(jié)點.參數(shù)arrayObj 為所有分片文件的M D 5 碼存放數(shù)組,文件的M D 5 碼可以通過spark.end()函數(shù)生成.

        大文件上傳的前端分片及MD5 計算關(guān)鍵代碼摘錄如下所示:

        4.2 多并發(fā)上傳

        在并發(fā)上傳過程中,瀏覽器支持的最大并發(fā)數(shù)t是一定的,因此設(shè)置的并發(fā)數(shù)如果超過該值,則會造成瀏覽器在執(zhí)行過程中并發(fā)請求排隊等待.所以,并發(fā)數(shù)的設(shè)置越接近t,傳輸效率越大.

        本文采取不同并發(fā)數(shù)來觀察它的效率變化情況,以控制并發(fā)數(shù)在一個合理值,poolSize 是最大并發(fā)請求數(shù),poolCount 是活動并發(fā)數(shù).通過定時函數(shù)setInterval()來執(zhí)行并發(fā)請求,當(dāng)poolCount<poolSize 時,就發(fā)起一個并發(fā)請求進行分片傳輸,poolCount 增加1,傳輸完成后poolCount 減少1,以此來保證并發(fā)數(shù)在設(shè)定值.

        多并發(fā)上傳的關(guān)鍵代碼摘錄如下所示:

        var idInt = setInterval(function(){

        5 實驗結(jié)果與分析

        5.1 實驗環(huán)境

        本次實驗服務(wù)器資源配置如表1 所示.

        表1 服務(wù)器配置信息

        為排除其它因素對本次實驗的影響,此次實驗僅保留原生的操作系統(tǒng),不安裝任何軟件/服務(wù)/組件(測試程序除外),最大程度的減少實驗影響因素.

        5.2 實驗結(jié)果

        本文提出基于Web 的大文件安全高效上傳方法主要設(shè)置參數(shù)為瀏覽器請求并發(fā)數(shù),為驗證其靈活性及通用性,本次實驗在保持分片大小不變的基礎(chǔ)上,采用不同并發(fā)數(shù)上傳同一文件進行驗證,重復(fù)進行3 次,實現(xiàn)結(jié)果如圖2 所示.

        圖2 不同線程數(shù)文件上傳耗時圖

        通過圖2 實驗結(jié)果可得出文件傳輸耗時是L 型變化的,請求并發(fā)數(shù)設(shè)置為3 時產(chǎn)生拐點.請求并發(fā)數(shù)與耗費時間在拐點之前呈反比關(guān)系,耗費時間隨著并發(fā)數(shù)的增大而線性減少,由于網(wǎng)絡(luò)帶寬以及瀏覽器軟件等實驗環(huán)境因素的影響,在拐點之后耗費時間趨于平穩(wěn).

        5.3 實驗分析

        對于文件上傳來說其優(yōu)劣主要由傳輸?shù)恼_性、時間成本、適應(yīng)性、可移植性、魯棒性這五個方面決定,通過這些判斷條件能夠很好的評估大文件安全高效上傳方案是否準(zhǔn)確高效.

        本文提出的大文件安全高效上傳方案基于Web方式進行優(yōu)化,利用HTML5 文件接口對大文件進行前端切片,后端合并,其本質(zhì)相當(dāng)于對待上傳文件進行了一次完整的數(shù)據(jù)傳輸,最終得到結(jié)果文件與上傳文件完全相符.在保持文件內(nèi)容不變的前提下,使用并發(fā)上傳能夠大大節(jié)約時間成本.其中基于Web 和HTML5 切片的傳輸方式,幾乎能適應(yīng)所有規(guī)模的文件Web 上傳環(huán)境;并通過斷點續(xù)傳確保了Web 傳輸?shù)目煽啃?

        6 總結(jié)

        本文提出基于Web 的大文件高效上傳方法,在傳統(tǒng)單線程大文件上傳基礎(chǔ)上,采用了多并發(fā)上傳,充分利用帶寬資源提高傳輸效率,對于存儲的資源文件進行特征庫收錄,實現(xiàn)已收錄文件的極速秒傳,節(jié)約了時間成本.同時對于大文件的MD5 計算,利用循環(huán)切片計算的方式極大的降低磁盤I/O 和內(nèi)存的占用.該方法普適性強、能夠很好地在文件傳輸過程中提高上傳效率、提升穩(wěn)定性、增強安全性,從而更好地為用戶服務(wù).

        猜你喜歡
        分片插件線程
        上下分片與詞的時空佈局
        詞學(xué)(2022年1期)2022-10-27 08:06:12
        分片光滑邊值問題的再生核方法
        CDN存量MP4視頻播放優(yōu)化方法
        自編插件完善App Inventor與樂高機器人通信
        電子制作(2019年22期)2020-01-14 03:16:34
        基于模糊二分查找的幀分片算法設(shè)計與實現(xiàn)
        淺談linux多線程協(xié)作
        MapWindowGIS插件機制及應(yīng)用
        基于Revit MEP的插件制作探討
        Linux線程實現(xiàn)技術(shù)研究
        么移動中間件線程池并發(fā)機制優(yōu)化改進
        忘忧草社区www日本高清| av在线男人的免费天堂| 成人爽a毛片免费网站中国| 亚洲中文字幕剧情类别| 久久久久亚洲av综合波多野结衣| 色偷偷av男人的天堂| 亚洲男同志gay 片可播放| 中文人妻av大区中文不卡| 99久久精品人妻一区二区三区 | 亚洲免费观看在线视频| 久久无码中文字幕东京热| 亚洲中文字幕精品久久久| 真实夫妻露脸自拍视频在线播放 | 久久久国产精品五月天伊人| 国产情侣亚洲自拍第一页| 性久久久久久| 日韩成人极品在线内射3p蜜臀| 国产午夜视频免费观看| 骚货人妻视频中文字幕| 日韩有码中文字幕在线观看| 成人av鲁丝片一区二区免费| 久久不见久久见免费视频7| 国语精品视频在线观看不卡| 亚洲成熟中老妇女视频| 亚洲中国精品精华液| 人人妻人人妻人人片av| 狠狠干视频网站| 日韩一区二区中文字幕视频| 人妻精品在线手机观看| 亚洲av日韩av天堂一区二区三区| 无码日韩AⅤ一区二区三区| 日本中文字幕一区二区在线观看 | 久久精品国产亚洲av无码偷窥| 亚洲人成电影在线观看天堂色| 欧美中文字幕在线看| 91青青草手机在线视频| 久久久久久久久无码精品亚洲日韩| 老少配老妇老熟女中文普通话| 国精品无码一区二区三区在线看 | 亚洲av日韩av综合aⅴxxx| 加勒比一本大道大香蕉|