本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,更具體地,涉及一種數(shù)據(jù)上傳方法及裝置。
背景技術(shù):
Cookies是用戶瀏覽網(wǎng)站時,由Web服務(wù)器置于用戶計算機(jī)硬盤或內(nèi)存中的文本文件,它可以記錄用戶的用戶名、密碼、瀏覽過的網(wǎng)頁以及停留時間等信息。當(dāng)用戶再次登陸該網(wǎng)站時,網(wǎng)站通過讀取計算機(jī)中的Cookies文件,得知用戶的相關(guān)信息,就可以做出相應(yīng)的動作,例如,在頁面顯示歡迎標(biāo)語,或者讓用戶不用輸入用戶名和密碼就直接登錄等等。由于Cookies帶有用戶屬性,從而在向Web服務(wù)器上傳文件時(如視頻或音頻文件),可同時攜帶Cookies以讓W(xué)eb服務(wù)器對用戶身份進(jìn)行驗(yàn)證?;谏鲜鰞?nèi)容,現(xiàn)有的數(shù)據(jù)上傳方法主要是通過直接獲取瀏覽器下域名對應(yīng)的Cookies,將獲取到的Cookies與文件上傳至服務(wù)器。
在實(shí)現(xiàn)本發(fā)明的過程中,發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題:由于在獲取瀏覽器下域名對應(yīng)的Cookies時,Cookies實(shí)際長度可能會超過瀏覽器所允許的最大Cookies長度,從而當(dāng)Cookies過長時會強(qiáng)制剔除掉超出的Cookies內(nèi)容,使得上傳過程中Cookies內(nèi)容不全或Cookies完全丟失,進(jìn)而導(dǎo)致數(shù)據(jù)上傳不完整。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種克服上述問題或者至少部分地解決上述問題的數(shù)據(jù)上傳方法及裝置。
根據(jù)本發(fā)明的一方面,提供了一種數(shù)據(jù)上傳方法,該方法包括:
對于任一瀏覽器下的任一域名,在本地獲取任一域名對應(yīng)的Cookies;
確定獲取到的Cookies對應(yīng)的Cookies長度;
根據(jù)Cookies長度,獲取任一域名對應(yīng)的完整Cookies;
將完整Cookies與目標(biāo)文件上傳至服務(wù)器。
根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)上傳裝置,該裝置包括:
第一獲取模塊,用于對于任一瀏覽器下的任一域名,在本地獲取任一域名對應(yīng)的Cookies;
確定模塊,用于確定獲取到的Cookies對應(yīng)的Cookies長度;
第二獲取模塊,用于根據(jù)Cookies長度,獲取任一域名對應(yīng)的完整Cookies;
上傳模塊,用于將完整Cookies與目標(biāo)文件上傳至服務(wù)器。
本申請?zhí)岢龅募夹g(shù)方案帶來的有益效果是:
通過在本地獲取任一域名對應(yīng)的Cookies,確定獲取到的Cookies對應(yīng)的Cookies長度。根據(jù)Cookies長度,獲取任一域名對應(yīng)的完整Cookies。將完整Cookies與目標(biāo)文件上傳至服務(wù)器。由于可根據(jù)在本地獲取到的Cookies,獲取任一域名對應(yīng)的完整Cookies,從而避免了因Cookies過長導(dǎo)致數(shù)據(jù)上傳不完整。后續(xù)服務(wù)器可根據(jù)上傳的完整Cookies進(jìn)行用戶身份驗(yàn)證,從而不至于因Cookies不全或者Cookies完全丟失而導(dǎo)致驗(yàn)證失敗。
附圖說明
圖1為本發(fā)明實(shí)施例的一種數(shù)據(jù)上傳方法的流程示意圖;
圖2為本發(fā)明實(shí)施例的一種數(shù)據(jù)上傳方法的流程示意圖;
圖3為本發(fā)明實(shí)施例的一種數(shù)據(jù)上傳裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例,對本發(fā)明的具體實(shí)施方式作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
在向服務(wù)器上傳數(shù)據(jù)時,為了驗(yàn)證用戶身份,通??梢詫ookies與目標(biāo)文件一起發(fā)送至服務(wù)器。其中,目標(biāo)文件可以為視頻文件或音頻文件,本實(shí)施例及后續(xù)實(shí)施例不對目標(biāo)文件的類型作具體限定?,F(xiàn)有的數(shù)據(jù)上傳方法主要是通過直接獲取瀏覽器下域名對應(yīng)的Cookies,將獲取到的Cookies與文件直接上傳至服務(wù)器。
由于在上傳數(shù)據(jù)時,Cookies的實(shí)際長度可能會超過瀏覽器所允許的最大Cookies長度,從而在獲取本地的Cookies時,會強(qiáng)制剔除掉超出的Cookies內(nèi)容,導(dǎo)致獲取到的Cookies內(nèi)容不全或完全丟失。相應(yīng)地,后續(xù)上傳過程中上傳的Cookies內(nèi)容也可能不全或完全丟失,從而導(dǎo)致數(shù)據(jù)上傳不完整。
針對現(xiàn)有技術(shù)中的問題,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)上傳方法。參見圖1,本實(shí)施例提供的方法流程包括:101、對于任一瀏覽器下的任一域名,在本地獲取任一域名對應(yīng)的Cookies;102、確定獲取到的Cookies對應(yīng)的Cookies長度;103、根據(jù)Cookies長度,獲取任一域名對應(yīng)的完整Cookies;104、將完整Cookies與目標(biāo)文件上傳至服務(wù)器。
需要說明的是,由于通常是某一瀏覽器下的某一域名對應(yīng)一個Cookies,而本實(shí)施例及后續(xù)實(shí)施例也是對一個Cookies進(jìn)行上傳,從而本實(shí)施例及后續(xù)實(shí)施例主要針對一種瀏覽器下的一個域名的Cookies,對其上傳過程進(jìn)行說明。實(shí)際實(shí)施過程中,任一瀏覽器下的任一域名均可以采用本實(shí)施例及后續(xù)實(shí)施例中的方法來對數(shù)據(jù)進(jìn)行上傳。
其中,本實(shí)施例及后續(xù)實(shí)施例涉及到的瀏覽器類型可為谷歌瀏覽器、IE瀏覽器、火狐瀏覽器或Opera瀏覽器中的任意一種等等,本實(shí)施例及后續(xù)實(shí)施例對此不作具體限定。另外,域名可以為視頻網(wǎng)站的域名、音樂網(wǎng)站的域名或購物網(wǎng)站的域名等,本實(shí)施例及后續(xù)實(shí)施例也不對域名類型作具體限定。
本發(fā)明實(shí)施例提供的方法,通過在本地獲取任一域名對應(yīng)的Cookies,確定獲取到的Cookies對應(yīng)的Cookies長度。根據(jù)Cookies長度,獲取任一域名對應(yīng)的完整Cookies。將完整Cookies與目標(biāo)文件上傳至服務(wù)器。由于可根據(jù)在本地獲取到的Cookies,獲取任一域名對應(yīng)的完整Cookies,從而避免了因Cookies過長導(dǎo)致數(shù)據(jù)上傳不完整。后續(xù)服務(wù)器可根據(jù)上傳的完整Cookies進(jìn)行用戶身份驗(yàn)證,從而不至于因Cookies不全或者Cookies完全丟失而導(dǎo)致驗(yàn)證失敗。
作為一種可選實(shí)施例,確定獲取到的Cookies對應(yīng)的Cookies長度,包括:
確定獲取到的Cookies中預(yù)設(shè)符號的數(shù)量;
根據(jù)預(yù)設(shè)符號的數(shù)量確定對應(yīng)的Cookies長度。
作為一種可選實(shí)施例,根據(jù)預(yù)設(shè)符號的數(shù)量確定對應(yīng)的Cookies長度,包括:
將預(yù)設(shè)符號的數(shù)量加1后所得到的數(shù)值,作為獲取到的Cookies對應(yīng)的Cookies長度。
作為一種可選實(shí)施例,根據(jù)Cookies長度,獲取任一域名對應(yīng)的完整Cookies,包括:
對于任一域名,獲取任一瀏覽器所允許的最大Cookies長度;
將最大Cookies長度與Cookies長度進(jìn)行比較;
根據(jù)比較結(jié)果,獲取任一域名對應(yīng)的完整Cookies。
作為一種可選實(shí)施例,根據(jù)比較結(jié)果,獲取任一域名對應(yīng)的完整Cookies,包括:
當(dāng)Cookies長度與最大Cookies長度相等時,向任一域名對應(yīng)的服務(wù)器請求任一域名對應(yīng)的完整Cookies;
當(dāng)Cookies長度與最大Cookies長度不相等時,將獲取到的Cookies作為任一域名對應(yīng)的完整Cookies。
作為一種可選實(shí)施例,將完整Cookies與目標(biāo)文件上傳至服務(wù)器之前,還包括:
對目標(biāo)文件進(jìn)行過濾。
作為一種可選實(shí)施例,對目標(biāo)文件進(jìn)行過濾,包括:
檢測目標(biāo)文件是否為預(yù)設(shè)文件類型;
當(dāng)目標(biāo)文件不為預(yù)設(shè)文件類型時,停止上傳目標(biāo)文件。
作為一種可選實(shí)施例,對目標(biāo)文件進(jìn)行過濾,包括:
檢測目標(biāo)文件的大小是否大于預(yù)設(shè)閾值;
當(dāng)目標(biāo)文件的大小大于預(yù)設(shè)閾值時,停止上傳目標(biāo)文件。
作為一種可選實(shí)施例,將完整Cookies與目標(biāo)文件上傳至服務(wù)器,包括:
根據(jù)目標(biāo)文件,生成預(yù)設(shè)格式的編碼;
根據(jù)任一瀏覽器的類型,將編碼及完整Cookies上傳至服務(wù)器。
上述所有可選技術(shù)方案,可以采用任意結(jié)合形成本發(fā)明的可選實(shí)施例,在此不再一一贅述。
基于上述圖1對應(yīng)實(shí)施例中的內(nèi)容,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)上傳方法。參見圖2,該方法包括:201、對于任一瀏覽器下的任一域名,在本地獲取任一域名對應(yīng)的Cookies;202、確定獲取到的Cookies對應(yīng)的Cookies長度;203、根據(jù)Cookies長度,獲取任一域名對應(yīng)的完整Cookies;204、對目標(biāo)文件進(jìn)行過濾;205、將完整Cookies與目標(biāo)文件上傳至服務(wù)器。
其中,201、對于任一瀏覽器下的任一域名,在本地獲取任一域名對應(yīng)的Cookies。
為了便于說明,本實(shí)施例以任一類型瀏覽器下的任一個域名為例,對數(shù)據(jù)上傳過程進(jìn)行闡述。本實(shí)施例不對在本地獲取任一域名對應(yīng)的Cookies的方式作具體限定,包括但不限于:通過調(diào)用預(yù)設(shè)接口,在本地獲取任一域名對應(yīng)的Cookies。
其中,預(yù)設(shè)接口可以為html接口,本實(shí)施例對此不作具體限定。具體地,本實(shí)施例對應(yīng)的Flash程序可以通過調(diào)用html接口來獲取瀏覽器下域名的Cookies。該過程可參考如下代碼(1):
ExternalInterface.call(function(){return window.document.cookie});
在上述代碼(1)中,Window指的是瀏覽器窗口,Document是瀏覽器窗口文檔。Cookies一般存儲在瀏覽器窗口文檔中。
其中,202、確定獲取到的Cookies對應(yīng)的Cookies長度。
Cookies通常是由一個個字符串組成的文本文件,從而Cookies有相應(yīng)的Cookies長度,即Cookies中包含的字符串個數(shù)。本實(shí)施例不對確定獲取到的Cookies對應(yīng)的Cookies長度的方式作具體限定,包括但不限于:確定獲取到的Cookies中預(yù)設(shè)符號的數(shù)量;根據(jù)預(yù)設(shè)符號的數(shù)量確定對應(yīng)的Cookies長度。
其中,預(yù)設(shè)符號可以分號,本實(shí)施例對此不作具體限定。Cookies中的單條字符串由預(yù)設(shè)符號進(jìn)行分割,從而對Cookies進(jìn)行遍歷,可確定Cookies中預(yù)設(shè)符號的個數(shù),可以間接地知道Cookies中字符串的條數(shù),從而能夠確定Cookies長度。
本實(shí)施例不對根據(jù)預(yù)設(shè)符號的數(shù)量確定對應(yīng)的Cookies長度的方式作具體限定,包括但不限于:將預(yù)設(shè)符號的數(shù)量加1后所得到的數(shù)值,作為獲取到的Cookies對應(yīng)的Cookies長度。
例如,以預(yù)設(shè)符號為分號為例。由于Cookies中最后一條字符串的后面是沒有分號的,從而在分號數(shù)量的基礎(chǔ)上加1,所得到的數(shù)值即為獲取到的Cookies對應(yīng)的Cookies長度。
其中,203、根據(jù)Cookies長度,獲取任一域名對應(yīng)的完整Cookies。
由圖1對應(yīng)實(shí)施例中的內(nèi)容可知,由于在上傳數(shù)據(jù)時,Cookies的實(shí)際長度可能會超過瀏覽器所允許的最大Cookies長度,從而在獲取本地的Cookies時,會強(qiáng)制剔除掉超出的Cookies內(nèi)容,導(dǎo)致獲取到的Cookies內(nèi)容不全或完全丟失。因此,本步驟主要是為了避免這種情況發(fā)生,以獲取完整的Cookies。
本實(shí)施例不對根據(jù)Cookies長度,獲取任一域名對應(yīng)的完整Cookies的方式作具體限定,包括但不限于:對于任一域名,獲取任一瀏覽器所允許的最大Cookies長度;將最大Cookies長度與Cookies長度進(jìn)行比較;根據(jù)比較結(jié)果,獲取任一域名對應(yīng)的完整Cookies。
由于每一類型的瀏覽器所允許的最大Cookies長度都是不一樣的,從而在上述過程中需要獲取瀏覽器的信息,即該瀏覽器標(biāo)識及該類型瀏覽器所允許的最大Cookies長度。例如,Microsoft的IE7及IE8增加cookie限制為每個域名50個。Firefox每個域名cookie限制長度為50,Opera每個域名cookie限制長度為30。
其中,具體獲取瀏覽器的信息時,可參考如下代碼(2):
ExternalInterface.call
("function BrowserAgent(){return navigator.userAgent;}")
在獲取到瀏覽器所允許的最大Cookies長度后,可將最大Cookies長度與Cookies長度進(jìn)行比較。根據(jù)比較結(jié)果,獲取任一域名對應(yīng)的完整Cookies。本實(shí)施例不對根據(jù)比較結(jié)果,獲取任一域名對應(yīng)的完整Cookies的方式作具體限定,包括但不限于:當(dāng)Cookies長度與最大Cookies長度相等時,向任一域名對應(yīng)的服務(wù)器請求任一域名對應(yīng)的完整Cookies;當(dāng)Cookies長度與最大Cookies長度不相等時,將獲取到的Cookies作為任一域名對應(yīng)的完整Cookies。
在本地保存Cookies數(shù)據(jù)時,當(dāng)Cookies長度超過瀏覽器所允許的最大Cookies長度時,會自動剔除超出的部分,并按照瀏覽器所允許的最大Cookies長度,在本地保存Cookies數(shù)據(jù)?;谏鲜鰞?nèi)容,可以得知當(dāng)本地保存的Cookies數(shù)據(jù)長度等于瀏覽器所允許的最大Cookies長度時,說明本地保存的Cookies數(shù)據(jù)有可能是剔除超出部分后所遺留下的Cookies數(shù)據(jù),即在本地獲取到的Cookies數(shù)據(jù)是不完整的。當(dāng)本地保存的Cookies數(shù)據(jù)長度小于瀏覽器所允許的最大Cookies長度時,說明本地保存的Cookies數(shù)據(jù)是肯定是完整的,即在本地獲取到的Cookies數(shù)據(jù)也是完整的。
基于上述說明,對于任一瀏覽器下的任一域名,當(dāng)Cookies長度與最大Cookies長度相等時,由于存在Cookies數(shù)據(jù)并非完整的可能性,而該域名對應(yīng)服務(wù)器保存的Cookies數(shù)據(jù)是完整的,從而可向該域名對應(yīng)的服務(wù)器請求該域名對應(yīng)的完整Cookies。當(dāng)Cookies長度與最大Cookies長度不相等時,則可直接將獲取到的Cookies作為該域名對應(yīng)的完整Cookies。由于后續(xù)需要將完整Cookies與目標(biāo)文件上傳至服務(wù)器,為了便于后續(xù)上傳,可在內(nèi)存中將完整Cookies賦值給變量newCookies,本實(shí)施例對此不作具體限定。
上述將最大Cookies長度與Cookies長度進(jìn)行比較的過程,可參考如下代碼(3):
Lose=n==n1?true:false
Lose是表示瀏覽器是否丟失Cookie,n為Cookie條數(shù),n1為該類型瀏覽器所允許的cookie最大條數(shù)。
由于本實(shí)施例主要是對Cookies與目標(biāo)文件進(jìn)行上傳,而目標(biāo)文件存在為垃圾文件的可能性,從而可對目標(biāo)文件進(jìn)行過濾,來阻止上傳垃圾文件。后續(xù)步驟主要是對過濾垃圾文件的過程進(jìn)行說明。
其中,204、對目標(biāo)文件進(jìn)行過濾。
關(guān)于對目標(biāo)文件進(jìn)行過濾的方式,本實(shí)施例對此不作具體限定,包括但不限于如下兩種方式。
第一種方式:檢測目標(biāo)文件是否為預(yù)設(shè)文件類型;當(dāng)目標(biāo)文件不為預(yù)設(shè)文件類型時,停止上傳目標(biāo)文件。
由于在上傳目標(biāo)文件時,通常上傳文件的類型是指定的,從而可以通過判斷目標(biāo)文件是否為預(yù)設(shè)文件類型,來確定目標(biāo)文件是否為垃圾文件。其中,預(yù)設(shè)文件類型可以為.png或.mp4文件等,本實(shí)施例對此不作具體限定。
具體實(shí)施時,可先初始化文件系統(tǒng),監(jiān)聽文件被選擇事件,即檢測用戶選擇目標(biāo)文件的操作,該過程可參考如下代碼(4):
file=new FileReference();
file.addEventListener(Event.SELECT,onFileSelect);
當(dāng)文件系統(tǒng)選擇事件被觸發(fā)時,可通過flie.type取得文件類型字符串賦值給變量fileType。在取得文件類型字符串后,可將文件類型字符串與預(yù)設(shè)文件類型進(jìn)行匹配,從而確定目標(biāo)文件是否為預(yù)設(shè)文件類型,該過程可參考如下代碼(5):
TypeOk=fileType.index(“.x”)>1?True:false
在上述代碼(5)中,TypeOk表示文件類型是否合法,fileType為文件類型字符串,x表示預(yù)設(shè)文件類型。
當(dāng)TypeOk不合法時,即目標(biāo)文件不為預(yù)設(shè)文件類型時,可停止上傳目標(biāo)文件。在此之后,還可提示用戶選擇正確文件類型,本實(shí)施例對此不作具體限定。
第二種方式:檢測目標(biāo)文件的大小是否大于預(yù)設(shè)閾值;當(dāng)目標(biāo)文件的大小大于預(yù)設(shè)閾值時,停止上傳目標(biāo)文件。
由于在上傳目標(biāo)文件時,文件太大會阻塞服務(wù)器,從而上傳文件時文件的大小通常是指定的。因此,可以根據(jù)目標(biāo)文件的大小,來確定目標(biāo)文件是否為垃圾文件。其中,預(yù)設(shè)閾值可根據(jù)實(shí)際需求進(jìn)行設(shè)置,本實(shí)施例對此不作具體限定。
具體實(shí)施時,可參考如下代碼(6):
sizeeOk=flie.size>x?True:false;
在上述代碼(6)中,sizeeOk表示文件大小是否合法,flie.size為文件大小。x表示系統(tǒng)設(shè)置文件最大字節(jié)數(shù),即預(yù)設(shè)閾值。如果sizeeOk不合法,即目標(biāo)文件的大小大于預(yù)設(shè)閾值,可停止上傳目標(biāo)文件。在此之后,還可提示用戶上傳文件過大,本實(shí)施例對此不作具體限定。
需要說明的是,上述兩種對目標(biāo)文件進(jìn)行過濾的方式,在實(shí)際實(shí)施中可選擇其中任意一種方式來對目標(biāo)文件進(jìn)行過濾,也可通過兩種方式同時對目標(biāo)文件進(jìn)行過濾,本實(shí)施例對此不作具體限定。另外,當(dāng)同時采用兩種方式對目標(biāo)文件進(jìn)行過濾時,具體先執(zhí)行哪種方式,本實(shí)施例對此不作具體限定。具體地,可先執(zhí)行第一種方式對目標(biāo)文件的文件類型進(jìn)行過濾,再執(zhí)行第二種方式對目標(biāo)文件的大小進(jìn)行過濾?;蛘?,可先執(zhí)行執(zhí)行第二種方式對目標(biāo)文件的大小進(jìn)行過濾,再第一種方式對目標(biāo)文件的文件類型進(jìn)行過濾。
通過上述第一種方式對文件進(jìn)行過濾,能夠剔除一些非法類型文件上傳,節(jié)省服務(wù)器帶寬。例如,服務(wù)器只接受圖片上傳,當(dāng)上傳的目標(biāo)文件格式為視頻格式時,可阻斷該視頻文件的上傳。由于視頻文件上傳會占用大量帶寬,從而通過該方式能夠節(jié)省服務(wù)器帶寬。
通過上述第二種方式對文件進(jìn)行過濾,能夠過濾掉較大的文件,從而能夠節(jié)省服務(wù)器的存儲空間。另外,還能夠避免惡意用戶攻擊服務(wù)器。例如,服務(wù)器只接受10M內(nèi)的文件,當(dāng)上傳的目標(biāo)文件大小大于10M時,可阻斷目標(biāo)文件的上傳。由于上傳超過10M的文件會占用服務(wù)器的大量存儲空間,從而通過該方式能夠節(jié)省服務(wù)器的存儲空間。另外,還能夠避免惡意用戶通過上傳大體積的文件攻擊服務(wù)器。
其中,205、將完整Cookies與目標(biāo)文件上傳至服務(wù)器。
由于直接上傳目標(biāo)文件不夠安全,從而可將目標(biāo)文件轉(zhuǎn)換為編碼,通過上傳編碼來實(shí)現(xiàn)目標(biāo)文件的上傳。相應(yīng)地,本實(shí)施例不對將完整Cookies與目標(biāo)文件上傳至服務(wù)器的方式作具體限定,包括但不限于:根據(jù)目標(biāo)文件,生成預(yù)設(shè)格式的編碼;根據(jù)任一瀏覽器的類型,將編碼及完整Cookies上傳至服務(wù)器。
其中,預(yù)設(shè)格式的編碼可以為Base64編碼,本實(shí)施例不對編碼格式作具體限定。通過將目標(biāo)文件轉(zhuǎn)換為Base64編碼,能夠提高數(shù)據(jù)上傳時的安全性。
將目標(biāo)文件轉(zhuǎn)換為Base64編碼的過程可參考如下代碼(7):
ByteArray=file.data;
FileString=Base64.encodeByteArray(data);
在上述代碼(7)中,變量FileString中存儲的即為轉(zhuǎn)換后的Base64編碼字符串。
在將目標(biāo)文件轉(zhuǎn)換為預(yù)設(shè)格式的編碼后,可將編碼及完整Cookies上傳至服務(wù)器。在對數(shù)據(jù)進(jìn)行上傳時,可采用http協(xié)議或Socket協(xié)議等,本實(shí)施例對此不作具體限定。
另外,由于某些類型瀏覽器在上傳文件時,如火狐瀏覽器,一些版本的Flash Player會系統(tǒng)性地丟失頭文件中的Cookies,從而在上傳目標(biāo)文件之前,還需要檢測瀏覽器是否為該類型的瀏覽器。
為了便于說明,以傳輸協(xié)議為http協(xié)議,以會丟失Cookies的瀏覽器類型為火狐瀏覽器為例,在上傳數(shù)據(jù)之前,可先檢測當(dāng)前瀏覽器是否為火狐瀏覽器,具體檢測過程可參考如下代碼(8):
isFix=BrowserInfo.index(“Firefox”)>1?True:false;
在上述代碼(8)中,isFix表示是否是火狐瀏覽器,BrowserInfo為上述步驟203中獲取到的瀏覽器信息,即瀏覽器標(biāo)識。通過驗(yàn)證獲取到的瀏覽器標(biāo)識是否為“Firefox”,從而可確定該瀏覽器是否為火狐瀏覽器。
當(dāng)isFix為false時,表示該瀏覽器不為火狐瀏覽器。通過new URLRequestHeader(“cookie”,newCookies)來設(shè)置http請求頭信息,將URLRequestHeader賦給request.requestHeaders。其中,newCookies即為上述步驟203中獲取到的完整Cookies。
當(dāng)isFix為true時,表示該瀏覽器為火狐瀏覽器。通過將URLVariables屬性的屬性值設(shè)置為newCookies,可讓http上傳請求中攜帶newCookies,從而避免了瀏覽器類型為火狐瀏覽器時,丟失頭文件中的Cookies。該過程可參考如下代碼(9):
URLVariables.cookie=newCookie;
通過上述過程,可在無論瀏覽器類型是不是火狐瀏覽器的情況下,可在http請求中強(qiáng)制注入Cookies,即對完整Cookies進(jìn)行包裝。通過強(qiáng)制注入Cookies可避免在某些情況下,Cookies丟失導(dǎo)致服務(wù)器無法校驗(yàn)。
在對完整Cookies進(jìn)行包裝后,可用URLVariables.fileData來包裝目標(biāo)文件對應(yīng)的Base64編碼。最后,可啟動urlloader.load(req),從而將完整Cookies與目標(biāo)文件上傳至服務(wù)器。
本發(fā)明實(shí)施例提供的方法,通過在本地獲取任一域名對應(yīng)的Cookies,確定獲取到的Cookies對應(yīng)的Cookies長度。根據(jù)Cookies長度,獲取任一域名對應(yīng)的完整Cookies。對目標(biāo)文件進(jìn)行過濾,將完整Cookies與目標(biāo)文件上傳至服務(wù)器。由于可根據(jù)在本地獲取到的Cookies,獲取任一域名對應(yīng)的完整Cookies,從而避免了因Cookies過長導(dǎo)致數(shù)據(jù)上傳不完整。后續(xù)服務(wù)器可根據(jù)上傳的完整Cookies進(jìn)行用戶身份驗(yàn)證,從而不至于因Cookies不全或者Cookies完全丟失而導(dǎo)致驗(yàn)證失敗。
另外,通過采樣兩種不同的方式來對目標(biāo)文件進(jìn)行過濾,能夠剔除一些非法類型文件上傳,節(jié)省服務(wù)器帶寬。除此之外,還能夠過濾掉較大的文件,避免惡意用戶攻擊服務(wù)器,從而能夠節(jié)省服務(wù)器的存儲空間。
最后,對于那些可能丟失Cookies的瀏覽器類型,通過在http請求中強(qiáng)制注入Cookies,能夠避免Cookies丟失而導(dǎo)致服務(wù)器無法進(jìn)行用戶身份驗(yàn)證。
本發(fā)明實(shí)施例提供了一種數(shù)據(jù)上傳裝置,該裝置用于執(zhí)行上述圖1或圖2對應(yīng)實(shí)施例所提供的數(shù)據(jù)上傳方法。參見圖3,該裝置包括:
第一獲取模塊301,用于對于任一瀏覽器下的任一域名,在本地獲取任一域名對應(yīng)的Cookies;
確定模塊302,用于確定獲取到的Cookies對應(yīng)的Cookies長度;
第二獲取模塊303,用于根據(jù)Cookies長度,獲取任一域名對應(yīng)的完整Cookies;
上傳模塊304,用于將完整Cookies與目標(biāo)文件上傳至服務(wù)器。
作為一種可選實(shí)施例,確定模塊302,包括:
第一確定單元,用于確定獲取到的Cookies中預(yù)設(shè)符號的數(shù)量;
第二確定單元,用于根據(jù)預(yù)設(shè)符號的數(shù)量確定對應(yīng)的Cookies長度。
作為一種可選實(shí)施例,第二確定單元,用于將預(yù)設(shè)符號的數(shù)量加1后所得到的數(shù)值,作為獲取到的Cookies對應(yīng)的Cookies長度。
作為一種可選實(shí)施例,第二獲取模塊303,包括:
第一獲取單元,用于對于任一域名,獲取任一瀏覽器所允許的最大Cookies長度;
比較單元,用于將最大Cookies長度與Cookies長度進(jìn)行比較;
第二獲取單元,用于根據(jù)比較結(jié)果,獲取任一域名對應(yīng)的完整Cookies。
作為一種可選實(shí)施例,第二獲取單元,用于當(dāng)Cookies長度與最大Cookies長度相等時,向任一域名對應(yīng)的服務(wù)器請求任一域名對應(yīng)的完整Cookies;當(dāng)Cookies長度與最大Cookies長度不相等時,將獲取到的Cookies作為任一域名對應(yīng)的完整Cookies。
作為一種可選實(shí)施例,該裝置還包括:
過濾模塊,用于對目標(biāo)文件進(jìn)行過濾。
作為一種可選實(shí)施例,過濾模塊,用于檢測目標(biāo)文件是否為預(yù)設(shè)文件類型;當(dāng)目標(biāo)文件不為預(yù)設(shè)文件類型時,停止上傳目標(biāo)文件。
作為一種可選實(shí)施例,過濾模塊,用于檢測目標(biāo)文件的大小是否大于預(yù)設(shè)閾值;當(dāng)目標(biāo)文件的大小大于預(yù)設(shè)閾值時,停止上傳目標(biāo)文件。
作為一種可選實(shí)施例,上傳模塊304,用于根據(jù)目標(biāo)文件,生成預(yù)設(shè)格式的編碼;根據(jù)任一瀏覽器的類型,將編碼及完整Cookies上傳至服務(wù)器。
本發(fā)明實(shí)施例提供的裝置,通過在本地獲取任一域名對應(yīng)的Cookies,確定獲取到的Cookies對應(yīng)的Cookies長度。根據(jù)Cookies長度,獲取任一域名對應(yīng)的完整Cookies。對目標(biāo)文件進(jìn)行過濾,將完整Cookies與目標(biāo)文件上傳至服務(wù)器。由于可根據(jù)在本地獲取到的Cookies,獲取任一域名對應(yīng)的完整Cookies,從而避免了因Cookies過長導(dǎo)致數(shù)據(jù)上傳不完整。后續(xù)服務(wù)器可根據(jù)上傳的完整Cookies進(jìn)行用戶身份驗(yàn)證,從而不至于因Cookies不全或者Cookies完全丟失而導(dǎo)致驗(yàn)證失敗。
另外,通過采樣兩種不同的方式來對目標(biāo)文件進(jìn)行過濾,能夠剔除一些非法類型文件上傳,節(jié)省服務(wù)器帶寬。除此之外,還能夠過濾掉較大的文件,避免惡意用戶攻擊服務(wù)器,從而能夠節(jié)省服務(wù)器的存儲空間。
最后,對于那些可能丟失Cookies的瀏覽器類型,通過在http請求中強(qiáng)制注入Cookies,能夠避免Cookies丟失而導(dǎo)致服務(wù)器無法進(jìn)行用戶身份驗(yàn)證。
最后,本申請的方法僅為較佳的實(shí)施方案,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。