本發(fā)明涉及大文件傳輸領(lǐng)域,具體涉及一種利用微服務(wù)的大文件上傳方法和裝置。
背景技術(shù):
1、文件上傳是指將本地計(jì)算機(jī)中的文件傳輸?shù)骄W(wǎng)絡(luò)上的服務(wù)器或另一臺(tái)計(jì)算機(jī)上的過程。在web開發(fā)中,文件上傳通常指的是將用戶通過web頁(yè)面提交的文件(如圖像、文檔、音頻、視頻等)傳輸?shù)椒?wù)器端的操作。簡(jiǎn)單來說,文件上傳是指將本地圖片、視頻、音頻等文件上傳到服務(wù)器上,供其他用戶瀏覽或下載的過程。文件上傳通常涉及以下幾個(gè)主要組件:客戶端:指的是文件上傳的發(fā)起方,通常是用戶在web瀏覽器中通過表單提交文件。服務(wù)器端:指的是接收并處理文件上傳請(qǐng)求的計(jì)算機(jī)系統(tǒng)或服務(wù)器。上傳表單:通過html表單元素來實(shí)現(xiàn)文件上傳功能。表單需要設(shè)置enctype屬性為“multipart/form-data”,并包含一個(gè)文件輸入框用于選擇要上傳的文件。文件處理邏輯:服務(wù)器端接收到文件上傳請(qǐng)求后,需要將上傳的文件保存到指定的位置,并可能進(jìn)行進(jìn)—步的處理,如文件存儲(chǔ)、文件重命名、文件格式驗(yàn)證等。登文件上傳控制器:在web開發(fā)框架中,通常需要編寫文件上傳的處理邏輯,這些邏輯通常由服務(wù)器端的控制器或處理器來處理。文件上傳在web開發(fā)中非常常見,常見的應(yīng)用場(chǎng)景包括但不限于用戶頭像上傳、文件分享、數(shù)據(jù)備份等。
2、傳統(tǒng)的大文件分片上傳通常使用http/https協(xié)議,每個(gè)文件分片都需要建立單獨(dú)的連接,這會(huì)導(dǎo)致服務(wù)器需要處理大量的連接建立和斷開請(qǐng)求,帶來額外的性能開銷。常規(guī)的服務(wù)系統(tǒng)中,通常是利用分片技術(shù)將文件分成多片,然后通過http/https協(xié)議與服務(wù)端建立多個(gè)連接進(jìn)行上傳。此外,http/https復(fù)雜的請(qǐng)求協(xié)議會(huì)給服務(wù)器帶來額外的開銷。隨著用戶量增加,這種方式對(duì)服務(wù)器性能是一個(gè)很大的考驗(yàn)。在傳統(tǒng)的大文件分片上傳技術(shù)中,由于每個(gè)文件分片都需要建立一個(gè)獨(dú)立的連接,若要進(jìn)行身份認(rèn)證,則每個(gè)連接都需要重復(fù)進(jìn)行認(rèn)證。這種做法顯著增加了服務(wù)器的負(fù)擔(dān)。傳統(tǒng)的大文件分片上傳技術(shù)在控制并發(fā)量時(shí),每次上傳完一個(gè)分片后,常常需要重新調(diào)用接口,甚至重新開啟一個(gè)線程來執(zhí)行后續(xù)任務(wù)。這種方法不僅增加了接口調(diào)用的開銷,還帶來了額外的線程管理復(fù)雜性。
技術(shù)實(shí)現(xiàn)思路
1、針對(duì)上述問題,本發(fā)明的一個(gè)目的是提供一種利用微服務(wù)的大文件上傳方法。
2、本發(fā)明的第二個(gè)目的是提供一種利用微服務(wù)的大文件上傳裝置。
3、本發(fā)明所采用的第一個(gè)技術(shù)方案是:s1、服務(wù)器接收到客戶端的上傳文件請(qǐng)求后,通過攔截器對(duì)所述上傳文件請(qǐng)求中的用戶的身份信息進(jìn)行校驗(yàn),校驗(yàn)通過則分配連接節(jié)點(diǎn);
4、s2、連接成功后,服務(wù)器接收客戶端上傳的文件及文件檢測(cè)請(qǐng)求,利用微服務(wù)文件檢查函數(shù)獲取上傳文件信息并檢查上傳文件狀態(tài);
5、s3、當(dāng)所述上傳文件狀態(tài)為不存在時(shí),服務(wù)器反饋給客戶端,客戶端則基于硬件可啟動(dòng)線程數(shù),計(jì)算流傳輸對(duì)象數(shù);
6、s4、客戶端基于未成功上傳文件,進(jìn)行二進(jìn)制數(shù)據(jù)分割,得到多個(gè)分片文件,并按順序給所述多個(gè)分片文件分配索引值,同時(shí)計(jì)算所述多個(gè)分片文件的md5值;
7、s5、將所述分片文件、分片文件索引值和分片文件md5值,通過流傳輸對(duì)象上傳至服務(wù)器進(jìn)行對(duì)比,確定分片文件上傳結(jié)果;
8、s6、當(dāng)所述分片文件上傳結(jié)果為完成時(shí),將上傳完成的分片文件利用微服務(wù)文件合并函數(shù)進(jìn)行合并,計(jì)算合并后文件的md5值,校驗(yàn)上傳文件完整度。
9、可選的,所述s1包括:
10、s11、服務(wù)器接收到客戶端的上傳文件請(qǐng)求后,通過所述攔截器讀取所述上傳文件請(qǐng)求中的用戶的身份信息;
11、s12、通過驗(yàn)證算法,校驗(yàn)所述身份信息的有效性,得到驗(yàn)證結(jié)果;
12、s13、當(dāng)所述驗(yàn)證結(jié)果為通過時(shí),利用負(fù)載均衡策略,分配最近一次連接節(jié)點(diǎn)給客戶端。
13、可選的,所述s2包括:
14、s21、連接成功后,接收客戶端發(fā)起的文件檢測(cè)請(qǐng)求,調(diào)用微服務(wù)文件檢查函數(shù)獲取文件信息,得到所述上傳文件的md5值,如下式:
15、mv文件=ma(bc文件)
16、式中,mv文件為所述上傳文件的md5值,ma為md5算法,bc文件為所述上傳文件的二進(jìn)制內(nèi)容;
17、s22、利用所述上傳文件的md5值檢查客戶端上傳的文件是否存在,當(dāng)所述上傳的文件存在時(shí),則將所述上傳文件信息關(guān)聯(lián)用戶并返回上傳成功結(jié)果。
18、可選的,所述s3包括:
19、s31、當(dāng)所述用戶上傳文件狀態(tài)為不存在時(shí),計(jì)算客戶端硬件可啟動(dòng)的線程數(shù),如下式:
20、m=t*0.2
21、a=min(i,m)
22、式中,m為可以啟動(dòng)的最大線程數(shù),t為設(shè)備的總線程數(shù),a為可啟動(dòng)的線程數(shù),i為當(dāng)前空閑線程數(shù);
23、s32、客戶端啟動(dòng)所有可啟動(dòng)線程,分別調(diào)用微服務(wù)文件上傳函數(shù),得到所述流傳輸對(duì)象數(shù)。
24、可選的,所述s4包括:
25、s41、將所述未成功上傳文件按照預(yù)設(shè)大小進(jìn)行二進(jìn)制分割,得到所述多個(gè)分片文件;
26、s42、對(duì)所述多個(gè)分片文件按順序分配索引值,得到所述分片文件索引值;
27、s43、計(jì)算所述分片文件的md5值,得到所述分片文件md5值。
28、可選的,所述s5包括:
29、s51、將所述分片文件、所述分片文件索引值和所述分片文件md5值通過所述流傳輸對(duì)象上傳至服務(wù)器,其中所述流傳輸對(duì)象可以重復(fù)使用;
30、s52、上傳完成后,服務(wù)器將所述分片文件md5值進(jìn)行對(duì)比,得到對(duì)比結(jié)果,對(duì)比公式如下:
31、mvffidx2=ma(bcffidx2)
32、vaild=eq(mvfidxx2,mvffidx)
33、式中,bcffidx2為接收到的分片文件二進(jìn)制數(shù)據(jù);mvffidx2為接收到的分片文件的md5值;eq()為判斷兩者是否相等;vaild為計(jì)算結(jié)果,取值為true或false;
34、s53、當(dāng)所述對(duì)比結(jié)果為失敗,則返回給客戶端上傳失敗結(jié)果,提示用戶重新上傳;
35、s54、當(dāng)所述對(duì)比結(jié)果為成功,則返回給客戶端上傳完成結(jié)果。
36、可選的,所述s6包括:
37、s61、當(dāng)所述分片文件上傳結(jié)果為完成時(shí),調(diào)用所述微服務(wù)文件檢查函數(shù),查詢分片文件信息,確定是否全部上傳完成;
38、s62、若全部上傳完成,則調(diào)用所述微服務(wù)文件合并函數(shù)進(jìn)行合并,得到合并后文件;
39、s63、計(jì)算所述合并后文件的md5值,并與所述分片文件md5值進(jìn)行對(duì)比,確定上傳文件完整度;
40、s64、若所述上傳文件完整度為不完整,則提示用戶上傳失?。?/p>
41、s65、若所述上傳文件完整度為完整,則返回文件信息。
42、本發(fā)明所采用的第二個(gè)技術(shù)方案是:服務(wù)器端和客戶端,其中:
43、服務(wù)器端包括:
44、校驗(yàn)?zāi)K,用于當(dāng)接收到客戶端的上傳文件請(qǐng)求后,通過攔截器對(duì)所述上傳文件請(qǐng)求中的用戶的身份信息進(jìn)行校驗(yàn),校驗(yàn)通過則分配連接節(jié)點(diǎn);
45、檢測(cè)模塊,用于在連接成功后,接收客戶端上傳的文件及文件檢測(cè)請(qǐng)求,利用微服務(wù)文件檢查函數(shù)獲取上傳文件信息并檢查上傳文件狀態(tài),并且當(dāng)所述上傳文件狀態(tài)為不存在時(shí),反饋給所述客戶端;
46、客戶端包括:
47、計(jì)算模塊,用于當(dāng)接收到服務(wù)器端反饋所述上傳文件狀態(tài)為不存在時(shí),基于硬件可啟動(dòng)線程數(shù),計(jì)算流傳輸對(duì)象數(shù);
48、分割模塊,用于基于未成功上傳文件,進(jìn)行二進(jìn)制數(shù)據(jù)分割,得到多個(gè)分片文件,并按順序給所述多個(gè)分片文件分配索引值,同時(shí)計(jì)算所述多個(gè)分片文件的md5值;
49、上傳模塊,用于將所述分片文件、分片文件索引值和分片文件md5值,通過流傳輸對(duì)象上傳至服務(wù)器;
50、以及服務(wù)器端還包括:
51、對(duì)比模塊:用于當(dāng)接收到客戶端通過流傳輸對(duì)象上傳的數(shù)據(jù)后,對(duì)比所述分片文件、分片文件索引值和分片文件md5值,確定分片文件上傳結(jié)果;
52、合并模塊,用于當(dāng)所述分片文件上傳結(jié)果為完成時(shí),將上傳完成的分片文件利用微服務(wù)文件合并函數(shù)進(jìn)行合并,計(jì)算合并后文件的md5值,校驗(yàn)上傳文件完整度。
53、可選的,所述校驗(yàn)?zāi)K包括:
54、身份讀取模塊,用于服務(wù)器接收到客戶端的上傳文件請(qǐng)求后,通過所述攔截器讀取所述上傳文件請(qǐng)求中的用戶的身份信息;
55、用戶驗(yàn)證模塊,用于通過驗(yàn)證算法,校驗(yàn)所述身份信息的有效性,得到驗(yàn)證結(jié)果;
56、連接分配模塊,用于當(dāng)所述驗(yàn)證結(jié)果為通過時(shí),利用負(fù)載均衡策略,分配最近一次連接節(jié)點(diǎn)給客戶端。
57、可選的,所述檢測(cè)包括:
58、信息獲取模塊,用于連接成功后,接收客戶端發(fā)起的文件檢測(cè)請(qǐng)求,調(diào)用微服務(wù)文件檢查函數(shù)獲取文件信息,得到文件的md5值,如下式:
59、mv文件=ma(bc文件)
60、式中,mv文件為所述上傳文件的md5值,ma為md5算法,bc文件為所述上傳文件的二進(jìn)制內(nèi)容;
61、關(guān)聯(lián)模塊,用于利用所述上傳文件的md5值檢查客戶端上傳的文件是否存在,當(dāng)所述上傳的文件存在時(shí),則將所述上傳文件信息關(guān)聯(lián)用戶并返回上傳成功結(jié)果。
62、上述技術(shù)方案的有益效果:
63、(1)本發(fā)明中使用rpc協(xié)議,支持在單一連接上進(jìn)行多個(gè)請(qǐng)求的并發(fā)輸出,避免頻繁的連接建立和斷開。
64、(2)本發(fā)明使用rpc協(xié)議后,只需在首次連接時(shí)進(jìn)行身份認(rèn)證,即可在單一連接內(nèi)處理所有后續(xù)的分片請(qǐng)求,避免了重復(fù)認(rèn)證,減輕了服務(wù)器壓力,提高了整體系統(tǒng)的效率。
65、(3)本發(fā)明中的文件上傳功能,采用了流式接口機(jī)制,通過調(diào)用微服務(wù)函數(shù),客戶端可以獲得一個(gè)可復(fù)用的流傳輸對(duì)象。在完成一個(gè)分片的上傳后,可以繼續(xù)使用同一個(gè)流對(duì)象上傳下一個(gè)分片,從而減少了重復(fù)調(diào)用接口的開銷。此外,采用rpc協(xié)議使得客戶端的硬件性能能夠更加充分地發(fā)揮,提高了整體傳輸效率。
66、(4)在請(qǐng)求過程中,攜帶的數(shù)據(jù)更加精簡(jiǎn),在節(jié)省帶寬的同時(shí),能夠顯著提高文件上傳速度,在上傳大文件時(shí),優(yōu)勢(shì)更加明顯。