一種文件上傳的系統(tǒng)、方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實(shí)施例涉及通信領(lǐng)域,尤其涉及一種文件上傳的系統(tǒng)、方法及裝置。
【背景技術(shù)】
[0002]在現(xiàn)代通信技術(shù)領(lǐng)域中,數(shù)據(jù)的采集、信息的共享和文件的傳輸都顯得至關(guān)重要。然而由于通信網(wǎng)絡(luò)的信號和通信信道等因素的不確定性,使得通信系統(tǒng)在可靠性方面存在著一定的隱患,比如數(shù)據(jù)包丟失、數(shù)據(jù)包損壞或數(shù)據(jù)包欺騙等。由于數(shù)據(jù)包的長度有限制,當(dāng)要傳輸大數(shù)據(jù)時,如大型文件,則需要將其進(jìn)行分包來傳輸。
[0003]現(xiàn)有技術(shù)中針對文件的傳輸主要有幾種方案:
[0004]1、發(fā)送方將文件拆分成固定大小的數(shù)據(jù)包,并對每個數(shù)據(jù)包添加數(shù)據(jù)包號,每隔一定的時間根據(jù)數(shù)據(jù)包號由小到大的順序傳輸數(shù)據(jù)包到接收方,接收方在收到最大數(shù)據(jù)包號或在規(guī)定時間到了之后向發(fā)送方發(fā)送確認(rèn)報文。
[0005]2、借鑒用戶數(shù)據(jù)報協(xié)議(UDP,User Datagram Protocol)報文傳輸時的分包、組包與丟包重傳機(jī)制,接收方每收到一個數(shù)據(jù)包就回確認(rèn)報文,直到所有數(shù)據(jù)包發(fā)送完畢。
[0006]3、在文件傳輸過程中采用哈希算法對文件內(nèi)容進(jìn)行校驗(yàn),再利用哈希算法對該計(jì)算的哈希值進(jìn)行二次校驗(yàn)。
[0007]上述兩種現(xiàn)有技術(shù)中,雖然第一種方案的數(shù)據(jù)包開銷小,但發(fā)送方無法實(shí)時了解數(shù)據(jù)包傳輸?shù)臓顟B(tài)。而第二種方案雖然可以實(shí)時了解數(shù)據(jù)包傳輸?shù)臓顟B(tài),但是對數(shù)據(jù)包的數(shù)量要求很大。兩種方案都沒有對整個文件的完整性進(jìn)行校驗(yàn),無法判斷文件在傳輸過程中內(nèi)容是否遭到了破壞,第三種方案能夠大大提升文件傳輸?shù)目煽啃?,但相對來說略顯復(fù)雜,增加了計(jì)算哈希值的開銷。
【發(fā)明內(nèi)容】
[0008]本發(fā)明實(shí)施例提供了一種文件上傳的系統(tǒng)、方法及裝置,該文件上傳的系統(tǒng)可用于進(jìn)行完整性校驗(yàn)、劃分?jǐn)?shù)據(jù)包處理、分組發(fā)送數(shù)據(jù)包、實(shí)時丟包重傳及響應(yīng),能夠有效地加強(qiáng)數(shù)據(jù)傳輸?shù)目煽啃?,而且?shí)現(xiàn)簡單,鏈路開銷小。
[0009]有鑒于此,本發(fā)明第一方面提供一種文件上傳的系統(tǒng),包括:用戶終端與服務(wù)器;
[0010]所述用戶終端用于發(fā)送文件;
[0011]所述服務(wù)器用于接收所述文件;
[0012]所述文件上傳的系統(tǒng)用于進(jìn)行完整性校驗(yàn)、劃分?jǐn)?shù)據(jù)包處理、分組發(fā)送數(shù)據(jù)包、實(shí)時丟包重傳及響應(yīng);
[0013]所述用戶終端對待上傳文件進(jìn)行所述完整性校驗(yàn),得到第一校驗(yàn)值;
[0014]所述用戶終端將所述待上傳文件分為多個數(shù)據(jù)包,并將所述多個數(shù)據(jù)包劃分為多個分組,每個分組包括至少一個數(shù)據(jù)包,每個數(shù)據(jù)包中包含各自的分包號,所述分包號用于所述服務(wù)器確定是否存在丟失的數(shù)據(jù)包;
[0015]所述用戶終端向所述服務(wù)器發(fā)送文件上傳請求,所述文件上傳請求中攜帶所述待上傳文件劃分得到的數(shù)據(jù)包總個數(shù)以及分組個數(shù);
[0016]當(dāng)所述服務(wù)器接收所述用戶終端發(fā)送的所述文件上傳請求后,向所述用戶終端發(fā)送上傳提示;
[0017]所述用戶終端接收到所述服務(wù)器發(fā)送的上傳提示后,向所述服務(wù)器發(fā)送分組中的數(shù)據(jù)包;
[0018]當(dāng)所述服務(wù)器接收到所述分組的全部數(shù)據(jù)包時,向所述用戶終端發(fā)送分組上傳完成提示;
[0019]若所述用戶終端未接收到分組上傳完成提示,則所述用戶終端向所述服務(wù)器發(fā)送請求報文;
[0020]所述服務(wù)器根據(jù)所述用戶終端發(fā)送的請求報文回傳分組中未收到數(shù)據(jù)包的分包號;
[0021]所述用戶終端根據(jù)所述分組中未收到數(shù)據(jù)包的分包號向所述服務(wù)器重新上傳所述分包號對應(yīng)的數(shù)據(jù)包;
[0022]當(dāng)確定所述待上傳文件全部上傳成功后,所述服務(wù)器對已經(jīng)全部上傳成功的文件進(jìn)行完整性校驗(yàn),得到第二校驗(yàn)值;
[0023]當(dāng)所述第一校驗(yàn)值與所述第二校驗(yàn)值相同時,用戶終端確定所述待上傳文件全部上傳成功。
[0024]結(jié)合本發(fā)明實(shí)施例的第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述當(dāng)所述服務(wù)器接收所述用戶終端發(fā)送的所述文件上傳請求后,向所述用戶終端發(fā)送上傳提示之前,所述系統(tǒng)還包括:
[0025]若所述用戶終端未接收到所述服務(wù)器發(fā)送的上傳提示,則繼續(xù)發(fā)送文件上傳請求;
[0026]用戶終端判斷所述文件上傳請求次數(shù)是否超過預(yù)置發(fā)送次數(shù);
[0027]若未超過,則所述用戶終端重新向服務(wù)器發(fā)送文件上傳請求;
[0028]若超過,則所述用戶終端終止所述待上傳文件的上傳。
[0029]結(jié)合本發(fā)明實(shí)施例的第一方面,在第二種可能的實(shí)現(xiàn)方式中,所述當(dāng)所述服務(wù)器接收到所述每個分組的全部數(shù)據(jù)包時,向所述用戶發(fā)送分組上傳完成提示之后,所述系統(tǒng)還包括:
[0030]當(dāng)所述用戶終端接收到所述分組上傳完成提示時,判斷剩余數(shù)據(jù)包個數(shù)是否大于每組中數(shù)據(jù)包的總數(shù);
[0031]若剩余數(shù)據(jù)包個數(shù)大于每組中數(shù)據(jù)包的總數(shù),則所述用戶終端根據(jù)分包號向所述服務(wù)器發(fā)送數(shù)據(jù)包;
[0032]若剩余數(shù)據(jù)包個數(shù)小于等于每組中數(shù)據(jù)包的總數(shù),則所述用戶終端發(fā)送所有剩余的數(shù)據(jù)包。
[0033]本發(fā)明第二方面提供一種文件上傳的方法,包括:
[0034]對待上傳文件進(jìn)行完整性校驗(yàn),得到第一校驗(yàn)值;
[0035]將所述待上傳文件劃分為多個數(shù)據(jù)包;
[0036]向服務(wù)器發(fā)送文件上傳請求,所述文件上傳請求中攜帶所述待上傳文件劃分得到的數(shù)據(jù)包總個數(shù);
[0037]接收到所述服務(wù)器發(fā)送的上傳提示后,向所述服務(wù)器發(fā)送所述多個數(shù)據(jù)包,每個數(shù)據(jù)包中包含各自的分包號,所述分包號用于所述服務(wù)器根據(jù)所述數(shù)據(jù)包的總個數(shù)確定所述待上傳文件是否全部上傳成功;
[0038]當(dāng)所述待上傳文件中所有的數(shù)據(jù)包上傳成功后,接收所述服務(wù)器發(fā)送的第二校驗(yàn)值,所述第二校驗(yàn)值為所述服務(wù)器確定所述待上傳文件全部上傳完成后,對所述待上傳文件進(jìn)行完整性校驗(yàn)得到的;
[0039]當(dāng)所述第一校驗(yàn)值與所述第二校驗(yàn)值相同時,確定所述待上傳文件全部上傳成功。
[0040]結(jié)合本發(fā)明實(shí)施例的第二方面,在第一種可能的實(shí)現(xiàn)方式中,所述將待上傳文件劃分為多個數(shù)據(jù)包之后,還包括:
[0041]將所述多個數(shù)據(jù)包劃分為多個分組,每個分組包括至少一個數(shù)據(jù)包;
[0042]所述接收到所述服務(wù)器發(fā)送的上傳提示后,向所述服務(wù)器發(fā)送所述多個數(shù)據(jù)包,每個數(shù)據(jù)包中包含各自的分包號,所述分包號用于所述服務(wù)器根據(jù)所述數(shù)據(jù)包的總個數(shù)確定所述待上傳文件是否全部上傳成功包括:
[0043]接收到所述服務(wù)器發(fā)送的分組上傳提示后,判斷所述待上傳文件中所有的數(shù)據(jù)包個數(shù)是否大于分組要求的分包個數(shù);
[0044]若所述待上傳文件中所有的數(shù)據(jù)包個數(shù)大于分組要求的分包個數(shù)時,則根據(jù)分包號由小至大向服務(wù)器依次發(fā)送分組中所有的數(shù)據(jù)包;
[0045]所述分組中所有的數(shù)據(jù)包發(fā)送完成后,依次發(fā)送下一組中所有的數(shù)據(jù)包;
[0046]若所述待上傳文件中所有的數(shù)據(jù)包個數(shù)小于等于分組要求的分包個數(shù)時,則向所述服務(wù)器一次性發(fā)送所述所有的數(shù)據(jù)包。
[0047]結(jié)合本發(fā)明實(shí)施例的第二方面,在第二種可能的實(shí)現(xiàn)方式中,所述向服務(wù)器發(fā)送文件上傳請求,所述文件上傳請求中攜帶所述待上傳文件劃分得到的數(shù)據(jù)包總個數(shù)包括:
[0048]向所述服務(wù)器發(fā)送文件上傳請求;
[0049]等待所述服務(wù)器發(fā)送的上傳提示;
[0050]若未收到上傳提示,則根據(jù)預(yù)置的最大發(fā)送文件上傳請求次數(shù),向所述服務(wù)器發(fā)送文件上傳請求;
[0051]當(dāng)超過預(yù)置的最大發(fā)送文件上傳請求次數(shù)時,則中斷文件上傳。
[0052]結(jié)合本發(fā)明實(shí)施例的第二方面的第一種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述若所述待上傳文件中所有的數(shù)據(jù)包個數(shù)大于分組要求的分包個數(shù)時,則根據(jù)分包號由小至大向服務(wù)器依次發(fā)送分組中所有的數(shù)據(jù)包之后,還包括:
[0053]若未接收到所述服務(wù)器發(fā)送分組上傳完成提示,則重新向所述服務(wù)器發(fā)送文件上傳請求;
[0054]接收所述服務(wù)器發(fā)送未收到的數(shù)據(jù)包的分包號;
[0055]根據(jù)所述未收到的數(shù)據(jù)包的分包號發(fā)送所述分包號對應(yīng)的數(shù)據(jù)包。
[0056]本發(fā)明第三方面提供一種文件上傳的方法,包括:
[0057]接收所述用戶終端發(fā)送的所述文件上傳請求;
[0058]根據(jù)所述文件上傳請求,向所述用戶終端發(fā)送所述文件分組上傳提示;
[0059]接收所述用戶終端發(fā)送的所述多個數(shù)據(jù)包;
[0060]根據(jù)每個數(shù)據(jù)包中包含的各自的分包號與所述文件上傳請求中攜帶的所述待上傳文件劃分得到的數(shù)據(jù)包總個數(shù),確定所述待上傳文件是否全部上傳成功;
[0061]當(dāng)確定所述待上傳文件全部上傳成功后,對已經(jīng)全部上傳成功的文件進(jìn)行完整性校驗(yàn),得到第二校驗(yàn)值;
[0062]向所述用戶終端發(fā)送所述第二校驗(yàn)值。
[0063]結(jié)合本發(fā)明實(shí)施例的第三方面,在第一種可能的實(shí)現(xiàn)方式中,所述接收所述用戶終端發(fā)送的所述多個數(shù)據(jù)包之后,還包括:
[0064]根據(jù)所述多個分組,判斷是否接收到每個分組中全部的數(shù)據(jù)包;
[0065]若接收到每個分組中全部的數(shù)據(jù)包,則向所述用戶終端發(fā)送上傳完成提示;
[0066]若沒有接收到每個分組中全部的數(shù)據(jù)包,則繼續(xù)等待接收所述每個分組中的剩余數(shù)據(jù)包。
[0067]結(jié)合本發(fā)明實(shí)施例的第三方面或第三方面第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述接收所述用戶終端發(fā)送的所述多個數(shù)據(jù)包之后,還包括:
[0068]提取所述數(shù)據(jù)包中的冗余檢驗(yàn)碼CRC ;
[0069]所述根據(jù)所述多個分組,判斷是否接收到每個分組中全部的數(shù)據(jù)包包括:
[0070]當(dāng)接收到多個分組中的每個數(shù)據(jù)包時,根據(jù)CRC驗(yàn)證碼判斷所述每個數(shù)據(jù)包中的數(shù)據(jù)是否正確;
[0071]若分組中所述每個數(shù)據(jù)包的數(shù)據(jù)均正確,則向所述用戶終端發(fā)送上傳正確完成提示;
[0072]若分組中有一個或多個數(shù)據(jù)包中的數(shù)據(jù)錯誤,則丟棄所述數(shù)據(jù)包。
[0073]本發(fā)明第四方面提供一種用戶終端,包括:
[0074]第一校驗(yàn)?zāi)K,用于對待上傳文件進(jìn)行完整性校驗(yàn),得到第一校驗(yàn)值;
[0075]第一劃分模塊,用于將所述待上傳文件劃分為多個數(shù)據(jù)包;
[0076]第一發(fā)送模塊,用于向服務(wù)器發(fā)送文件上傳請求,所述文件上傳請求中攜帶所述待上傳文件劃分得到的數(shù)據(jù)包總個數(shù);
[0077]第二發(fā)送模塊,用于接收到所述服務(wù)器發(fā)送的上傳提示后,向所述服務(wù)器發(fā)送所述多個數(shù)據(jù)包,每個數(shù)據(jù)包中包含各自的分包號,所述分包號用于所述服務(wù)器根據(jù)所述數(shù)據(jù)包的總個數(shù)確定所述待上傳文件是否全部上傳成功;
[0078]第一接收模塊,用于當(dāng)所述待上傳文件中所有的數(shù)據(jù)包上傳成功后,接收所述服務(wù)器發(fā)送的第二校驗(yàn)值,所述第二校驗(yàn)值為所述服務(wù)器確定所述待上傳文件全部上傳完成后,對所述待上傳文件進(jìn)行完整性校驗(yàn)得到的;
[0079]第一確定模塊,用于當(dāng)所述第一校驗(yàn)值與所述第二校驗(yàn)值相同時,確定所述待上傳文件全部上傳成功。
[0080]結(jié)合本發(fā)明實(shí)施例的第四方面,在第一種可能的實(shí)現(xiàn)方式中,所述用戶終端還包括:
[0081]第二劃分模塊,用于將所述多個數(shù)據(jù)包劃分為多個分組,每個分組包括至少一個數(shù)據(jù)包;
[0082]所述第二發(fā)送模塊包括:
[0083]第一判斷單元,接收到所述服務(wù)器發(fā)送的分組上傳提示后,判斷所述待上傳文件中所有的數(shù)據(jù)包個數(shù)是否大于或等于分組要求的分包個數(shù);
[0084]第一發(fā)送單元,若所述待上傳文件中所有的數(shù)據(jù)包個數(shù)大于分組