文件上傳方法、客戶端、服務器及系統的制作方法
【專利摘要】本發明公開了一種文件上傳方法、客戶端、服務器及系統,屬于互聯網通信領域。所述方法包括:接收客戶端在一次上傳任務中發送的數據上傳請求,所述數據上傳請求用于請求上傳一個文件的全部或者部分數據;判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢;如果是,則向所述客戶端發送所述文件上傳完畢的消息;如果否,則接收所述數據并存儲。本發明通過服務器在接收到客戶端的數據上傳請求時,判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢,來選擇完成本次上傳任務或者繼續接收數據,達到了文件上傳沖突時,服務器總是只存儲一份文件,而且只要有一個客戶端上傳該文件成功,則其他客戶端無需繼續上傳從而節省了上傳流量的效果。
【專利說明】文件上傳方法、客戶端、服務器及系統
【技術領域】
[0001]本發明涉及互聯網通信領域,特別涉及一種文件上傳方法、客戶端、服務器及系統。
【背景技術】
[0002]文件上傳是指客戶端將自身存儲的文件利用有線或者無線網絡上傳到服務器中進行存儲的過程,是互聯網用戶常用的功能之一。
[0003]在文件上傳過程中,可能會出現同時上傳兩個相同的文件的上傳沖突現象,比如,用戶首先上傳一個文件A,然后在文件A的上傳過程還未結束時,再次上傳文件A的現象。為了解決這種上傳沖突現象,現有的文件上傳方法包括:第一,客戶端向服務器發送文件上傳請求,用于請求上傳文件A ;第二,服務器接收該文件上傳請求,然后與客戶端建立任務I用于上傳文件A ;第三,在任務I正在進行過程中或者暫停過程中,客戶端再次向服務器發送文件上傳請求,用于請求上傳文件A ;第四,服務器接收該文件上傳請求,然后與客戶端建立任務2用于上傳文件A,但服務器丟棄此次文件A的上傳內容,先拷貝任務I中文件A的已上傳內容到任務2相應的存儲位置,并向客戶端響應目前文件A的已上傳部分的偏移位置;第五,客戶端收到響應后從偏移位置開始繼續上傳文件A的后續部分。此時任務I和任務2是并行的兩個任務,各自的上傳過程互不沖突,服務器存儲的是該用戶不同時刻上傳的兩份內容一樣的文件A。另外,在上傳文件A的過程中,通常客戶端都將文件A分割為多個數據包依次上傳,每次上傳一個數據包時,都需要向服務器發送一次數據上傳請求。
[0004]在實現本發明的過程中,發明人發現現有技術至少存在以下問題:雖然在任務2中采用從偏移位置開始繼續上傳文件A的技術手段,可以節省客戶端的上傳流量,但是實質上服務器仍然存儲了兩份一模一樣的文件A,也即服務器耗費了 2倍于文件A的文件大小的存儲空間,同時客戶端在上傳過程中耗費了最少I倍、最多2倍于文件A的文件大小的上傳流量。當服務器為云存儲平臺和/或客戶端是移動終端時,現有技術對存儲空間和上傳流量的耗費是比較多的。
【發明內容】
[0005]為了解決現有技術對存儲空間和上傳流量耗費較多的問題,本發明實施例提供了一種文件上傳方法、客戶端、服務器及系統。所述技術方案如下:
[0006]一個方面,提供了一種文件上傳方法,所述方法包括:
[0007]接收客戶端在一次上傳任務中發送的數據上傳請求,所述數據上傳請求用于請求上傳一個文件的全部或者部分數據;
[0008]判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢;
[0009]如果是,則向所述客戶端發送所述文件上傳完畢的消息;
[0010]如果否,則接收所述數據并存儲。
[0011]進一步地,所述接收客戶端在一次上傳任務中發送的數據上傳請求之前,還包括:
[0012]接收客戶端發送的所述文件的內容標識信息;
[0013]根據所述文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件;
[0014]如果是,向所述客戶端發送第一響應消息,所述第一響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置,以便所述客戶端上傳所述文件中的未上傳部分;
[0015]如果否,向所述客戶端發送第二響應消息,以便所述客戶端上傳所述文件。
[0016]進一步地,所述數據上傳請求用于請求上傳一個文件的部分數據,
[0017]在判斷到同時在上傳所述文件的其它上傳任務還未上傳完畢之后,所述接收所述數據并存儲之前,還包括:
[0018]判斷同時在上傳所述文件的其它上傳任務中所述文件的已上傳部分是否已經包含所述客戶端請求上傳的部分數據;
[0019]如果是,則向所述客戶端發送第三響應消息,所述第三響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置,以便所述客戶端上傳所述文件中的未上傳部分;
[0020]如果否,則執行所述接收所述數據并存儲的步驟。
[0021]進一步地,所述數據上傳請求用于請求上傳一個文件的部分數據,
[0022]所述接收所述數據并存儲之后,還包括:
[0023]檢測所述部分數據是否為所述文件的最后部分:
[0024]若所述部分數據是所述文件的最后部分,則將所述文件的所有數據存儲至同一存儲位置,并且生成所述文件的存儲位置與所述文件的文件內容的標識信息之間的對應關系O
[0025]進一步地,所述接收客戶端發送的所述文件的內容標識信息之后,還包括:
[0026]生成與所述文件的內容標識信息所對應的提取碼,并存儲所述文件的內容標識信息和所述提取碼之間的對應關系;
[0027]所述向所述客戶端發送第一響應消息,對應包括:
[0028]向所述客戶端發送還攜帶有所述提取碼的第一響應消息,以便所述客戶端在上傳所述文件之后,根據所述提取碼下載所述文件;
[0029]所述向所述客戶端發送第二響應消息,對應包括:
[0030]向所述客戶端發送攜帶有所述提取碼的第二響應消息,以便所述客戶端在上傳所述文件之后,根據所述提取碼下載所述文件。
[0031]進一步地,若其它上傳任務為兩個或者兩個以上,則所述其它上傳任務中所述文件的已上傳部分的偏移位置為:
[0032]所述其它上傳任務中最早的上傳任務所對應的所述文件的已上傳部分的偏移位置;
[0033]或者,所述其它上傳任務中上傳進度最快的上傳任務所對應的所述文件的已上傳部分的偏移位置。
[0034]另一方面,提供了一種服務器,所述服務器包括:
[0035]請求接收模塊,用于接收客戶端在一次上傳任務中發送的數據上傳請求,所述數據上傳請求用于請求上傳一個文件的全部或者部分數據;
[0036]任務判斷模塊,用于判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢;
[0037]完畢反饋模塊,用于如果所述任務判斷模塊的判斷結果為是,則向所述客戶端發送所述文件上傳完畢的消息;
[0038]數據存儲模塊,用于如果所述任務判斷模塊的判斷結果為否,則接收所述數據并存儲。
[0039]進一步地,所述服務器,還包括:
[0040]標識接收模塊、沖突檢測模塊、第一響應模塊和第二響應模塊;
[0041]所述標識接收模塊,用于接收客戶端發送的所述文件的內容標識信息;
[0042]所述沖突檢測模塊,用于根據所述文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件;
[0043]所述第一響應模塊,用于如果所述沖突檢測模塊的判斷結果為是,則向所述客戶端發送第一響應消息,所述第一響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置,以便所述客戶端上傳所述文件中的未上傳部分;
[0044]所述第二響應模塊,用于如果所述沖突檢測模塊的判斷結果為否,則向所述客戶端發送第二響應消息,以便所述客戶端上傳所述文件。
[0045]進一步地,所述請求接收模塊接收到的數據上傳請求用于請求上傳一個文件的部分數據,
[0046]所述數據存儲模塊,具體包括:重復判斷單元、第三響應單元和數據存儲單元;
[0047]所述重復判斷單元,用于判斷同時在上傳所述文件的其它上傳任務中所述文件的已上傳部分是否已經包含所述客戶端請求上傳的部分數據;
[0048]所述第三響應單元,用于如果所述重復判斷單元的判斷結果為是,則向所述客戶端發送第三響應消息,所述第三響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置,以便所述客戶端上傳所述文件中的未上傳部分;
[0049]所述數據存儲單元,用于如果所述重復判斷單元的判斷結果為否,則執行所述接收所述數據并存儲的步驟。
[0050]進一步地,所述請求接收模塊接收到的數據上傳請求用于請求上傳一個文件的部分數據,
[0051]所述服務器,還包括:
[0052]數據檢測模塊和關系生成模塊;
[0053]所述數據檢測模塊,用于檢測所述數據存儲模塊存儲的部分數據是否為所述文件的最后部分:
[0054]所述關系生成模塊,用于若所述數據檢測模塊檢測到部分數據是所述文件的最后部分,則將所述文件的所有數據存儲至同一存儲位置,并且生成所述文件的存儲位置與所述文件的文件內容的標識信息之間的對應關系。
[0055]進一步地,所述服務器,還包括:
[0056]提取碼生成模塊;
[0057]所述提取碼生成模塊,用于生成與所述文件的內容標識信息所對應的提取碼,并存儲所述文件的內容標識信息和所述提取碼之間的對應關系;
[0058]所述第一響應模塊,具體用于向所述客戶端發送還攜帶有所述提取碼的第一響應消息,以便所述客戶端在上傳所述文件之后,根據所述提取碼下載所述文件;
[0059]所述第二響應模塊,具體用于向所述客戶端發送攜帶有所述提取碼的第二響應消息,以便所述客戶端在上傳所述文件之后,根據所述提取碼下載所述文件。
[0060]進一步地,若其它上傳任務為兩個或者兩個以上,則所述其它上傳任務中所述文件的已上傳部分的偏移位置為:
[0061]所述其它上傳任務中最早的上傳任務所對應的所述文件的已上傳部分的偏移位置;
[0062]或者,所述其它上傳任務中上傳進度最快的上傳任務所對應的所述文件的已上傳部分的偏移位置。
[0063]再一方面,提供了一種客戶端,包括:
[0064]請求發送模塊,用于向服務器發送數據上傳請求,所述數據上傳請求用于請求上傳一個文件的全部或者部分數據;
[0065]停止發送模塊,用于在接收到所述服務器發送的所述文件上傳完畢的消息時,停止發送所述文件的全部或者部分數據;
[0066]正常發送模塊,用于在未接收到所述服務器發送的所述文件上傳完畢的消息時,發送所述文件的全部或者部分數據。
[0067]進一步地,所述客戶端,還包括:
[0068]標識發送模塊和第一接收模塊;
[0069]所述標識發送模塊,用于向所述服務器發送所述文件的內容標識消息,以便所述服務器根據所述文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件;
[0070]所述第一接收模塊,用于接收所述服務器在判斷到存在其它上傳任務正在上傳相同的文件之后發送的第一響應消息,所述第一響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置;
[0071]所述請求發送模塊,具體用于在第一接收模塊接收到第一響應消息之后,向服務器發送數據上傳請求,所述數據上傳請求用于請求上傳所述文件中從所述偏移位置開始的部分數據。
[0072]所述第二接收模塊,用于接收所述服務器在根據所述標識發送模塊512發送的所述文件的內容標識信息判斷到不存在其它上傳任務正在上傳相同的文件之后發送的第二響應消息;
[0073]所述請求發送模塊,具體用于在第二接收模塊接收到第二響應消息之后,向服務器發送數據上傳請求,所述數據上傳請求用于請求上傳所述文件中從文件頭開始的部分數據。
[0074]進一步地,所述客戶端,還包括:
[0075]第三接收模塊;
[0076]所述第三接收模塊,用于接收所述服務器在判斷到其它上傳任務中所述文件的已上傳部分是否已經包含客戶端請求上傳的部分數據之后發送的第三響應消息,所述第三響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置;[0077]所述請求發送模塊,還用于向所述服務器再次發送數據上傳請求,所述數據上傳請求用于請求上傳所述文件中從所述偏移位置開始的部分數據。
[0078]進一步地,所述客戶端,還包括:
[0079]提取碼接收模塊,用于接收所述服務器發送的提取碼;
[0080]下載請求發送模塊,用于根據所述提取碼向所述服務器發送文件下載請求。
[0081]又一方面,提供了一種文件上傳系統,其包括如上另一方面所述的服務器和如上再一方面所述的客戶端。
[0082]本發明實施例提供的技術方案帶來的有益效果是:
[0083]通過在接收到客戶端的數據上傳請求時,判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢,來選擇完成本次上傳任務或者繼續接收數據,解決了現有技術對存儲空間和上傳流量耗費較多的問題,達到了在相同或者不同的客戶端同時上傳同一文件而導致沖突問題時,服務器總是只存儲一份該文件,而且只要有一個客戶端上傳該文件成功,則其他客戶端無需繼續上傳該文件,從而節省了其他客戶端的上傳流量的效果。
【專利附圖】
【附圖說明】
[0084]為了更清楚地說明本發明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其它的附圖。
[0085]圖1是本發明實施例提供的一種實施環境的結構示意圖;
[0086]圖2是本發明實施例一提供的文件上傳方法的方法流程圖;
[0087]圖3是本發明實施例二提供的文件上傳方法的方法流程圖;
[0088]圖4是本發明實施例三提供的文件上傳方法的方法流程圖;
[0089]圖5是本發明實施例四提供的服務器的結構方框圖;
[0090]圖6是本發明實施例五提供的服務器的結構方框圖;
[0091]圖7是本發明實施例六提供的服務器的結構方框圖;
[0092]圖8是本發明實施例七提供的客戶端的結構方框圖;
[0093]圖9是本發明實施例八提供的客戶端的結構方框圖;
[0094]圖10是本發明實施例九提供的文件上傳系統的結構方框圖。
【具體實施方式】
[0095]為使本發明的目的、技術方案和優點更加清楚,下面將結合附圖對本發明實施方式作進一步地詳細描述。
[0096]請參考圖1,其示出了本發明實施例提供的一種實施環境的結構示意圖。該實施環境包括服務器120和客戶端140。
[0097]服務器120可以是具有文件存儲能力的計算機,比如,可以是云存儲平臺中的一部分。
[0098]客戶端140可以是諸如筆記本電腦、臺式電腦之類的終端,也可以是智能手機、平板電腦或者電子書閱讀器之類的移動終端。在本文件上傳系統中,客戶端140可以為多個,每個客戶端140可以通過有線或者無線網絡分別與服務器120相連。
[0099]實施例一
[0100]請參考圖2,其示出了本發明實施例一提供的文件上傳方法的方法流程圖。本實施例主要以該文件上傳方法應用于圖1所示服務器120中來舉例說明,該文件上傳方法用于多個上傳任務同時上傳同一文件時的文件上傳過程,該文件上傳方法包括:
[0101]步驟102,接收客戶端在一次上傳任務中發送的數據上傳請求,該數據上傳請求用于請求上傳一個文件的全部或者部分數據;
[0102]服務器可以接收客戶端在一次上傳任務中發送的數據上傳請求,該數據上傳請求用于請求上傳一個文件的全部或者部分數據。通常來講,當客戶端向服務器上傳一個文件時,會將該文件分割為多個相同或者不同大小的數據塊來分別上傳給服務器,在每次上傳一個數據包時,客戶端都會向服務器發送一個數據上傳請求。
[0103]當然,在一些實施例中,比如文件的數據量很小時,客戶端可以直接請求傳輸該文件的全部數據,而不需要將該文件分割為很多個數據包。
[0104]步驟104,判斷同時在上傳該文件的其它上傳任務是否已經上傳完畢;如果是,則進入步驟106 ;如果否,則進入步驟108 ;
[0105]在同時存在上傳該文件的其它上傳任務時,服務器在接收到該客戶端的數據上傳請求之后,服務器可以判斷同時在上傳該文件的其它上傳任務是否已經將該文件上傳完畢。比如,服務器接收到客戶端I在上傳任務I中發送的數據上傳請求,該數據上傳請求用于請求文件A的第3個數據包,在同時存在上傳該文件的上傳任務2時,服務器可以判斷同時在上傳該文件的上傳任務2是否已經將文件A上傳完畢。
[0106]步驟106,向客戶端發送該文件上傳完畢的消息;
[0107]如果服務器判斷到同時上傳該文件的上傳任務2已經將文件A上傳完畢,則向客戶端發送文件A上傳完畢的消息,也即表示客戶端無需繼續上傳文件A的數據。
[0108]步驟108,接收數據并存儲。
[0109]如果服務器判斷到同時上傳該文件的上傳任務2還未將文件A上傳完畢,則接收客戶端請求上傳的數據并存儲。
[0110]同理,如果服務器接收到客戶端2在上傳任務2中發送的數據上傳請求時,則服務器判斷同時上傳該文件的上傳任務I是否已經將文件A上傳完畢。另外,在一些實施例中,上傳任務I和上傳任務2也可以都由一個客戶端建立。
[0111]綜上所述,本實施例提供的文件上傳方法,通過在接收到客戶端的數據上傳請求時,判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢,來選擇完成本次上傳任務或者繼續接收數據,解決了現有技術對存儲空間和上傳流量耗費較多的問題,達到了在相同或者不同的客戶端同時上傳同一文件而導致沖突問題時,服務器總是只存儲一份該文件,而且只要有一個客戶端上傳該文件成功,則其他客戶端無需繼續上傳該文件,從而節省了其他客戶端的上傳流量的效果。
[0112]實施例二
[0113]請參考圖3,其示出了本發明實施例二提供的文件上傳方法的方法流程圖。本實施例主要以該文件上傳方法應用于圖1所示的服務器中來舉例說明,該文件上傳方法用于多個上傳任務同時上傳同一文件時的文件上傳過程,該文件上傳方法包括:[0114]步驟202,接收客戶端發送的文件的內容標識信息;
[0115]在客戶端需要上傳文件時,客戶端向服務器發送文件上傳請求,該文件上傳請求攜帶有該文件的內容標識信息,比如該文件的MD5(Message Digest AlgorithmMD5,消息摘要算法第五版)值。由于文件的內容標識信息是根據文件包括的內容獲取得到的,所以相同的文件具有相同的內容標識信息,不同的文件具有不同的內容標識信息。
[0116]該文件上傳請求還可以攜帶有文件的文件信息和客戶端的標識信息,其中,文件信息可以包括文件名、文件格式和文件大小之類的信息;客戶端的標識信息可以是一組用戶名或者密碼、IMEI(International Mobile Equipment Identity,國際移動設備身份碼)、UUID (Universally Unique Identifier,通用唯一識別碼)或者 GUID (Globally UniqueIdentifier,全球唯一標識符)。
[0117]需要說明的是,文件上傳請求可以用于請求上傳不止一個文件,比如,一個文件上傳請求中同時請求上傳三個文件。但在本文中,為了簡化描述,均以一個文件上傳請求用于請求上傳一個文件為例來進行描述。
[0118]步驟204,根據文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件;如果是,則進入步驟206 ;如果否,則進入步驟208 ;
[0119]服務器在接收客戶端發送的文件上傳請求之后,服務器根據該文件上傳請求中攜帶的文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件,比如,服務器可以判斷正在進行的上傳任務中,是否存在上傳任務正在上傳與該內容標識信息相對應的文件。
[0120]易于思及的,服務器在進行本步驟之前,也可以先根據該文件的內容標識信息判斷本地是否已經存儲有該文件,如果是,則直接進入步驟214 ;如果否,再執行本步驟。
[0121]步驟206,向客戶端發送第一響應消息,第一響應消息攜帶有其它上傳任務中該文件的已上傳部分的偏移位置,以便客戶端上傳該文件中的未上傳部分;
[0122]如果服務器判斷到存在其它上傳任務正在上傳該文件,則服務器向客戶端發送第一響應消息,第一響應消息攜帶有其它上傳任務中該文件的已上傳部分的偏移位置。具體地講,該文件的已上傳部分的偏移位置是指該文件的已上傳數據在全部數據中相對于文件頭的偏移位置,比如,文件的大小為108KB,該文件的已上傳數據為80KB,則該文件的已上傳數據在全部數據中相對于文件頭的偏移位置為80KB。此后,客戶端可以從相對于該文件的文件頭偏移80KB的位置開始,繼續上傳該文件的剩余數據,也即該文件中的未上傳部分。
[0123]由于除了本次上傳任務,同時在上傳該文件的其它上傳任務可能為兩個或者兩個以上,此時,該文件的已上傳部分的偏移位置可以是其它上傳任務中最早的上傳任務所對應的該文件的已上傳部分的偏移位置,比如,本次上傳任務是任務3,則服務器反饋向客戶端反饋的該文件的已上傳部分的偏移位置是任務I中該文件的已上傳部分的偏移位置;該文件的已上傳部分的偏移位置也可以是其它上傳任務中上傳進度最快的上傳任務所對應的該文件的已上傳部分的偏移位置,本次上傳任務是任務3,任務I和任務2相比,任務2中該文件的已上傳部分更多,則服務器反饋向客戶端反饋的該文件的已上傳部分的偏移位置是任務2中該文件的已上傳部分的偏移位置。
[0124]在具體實現時,服務器可以按照文件的內容標識信息為索引,記錄每個文件的已上傳部分的偏移位置,一種情況下,服務器可以僅記錄上傳該文件的第一個上傳任務中該文件的已上傳部分的偏移位置,比如,服務器每次接收到任務I對于該文件上傳的一個數據包時,更新該文件的已上傳部分的偏移位置;另一種情況下,服務器可以同時記錄每個上傳該文件的上傳任務中該文件的已上傳部分的偏移位置,比如,服務器每次接收完畢一個上傳任務對于該文件上傳的一個數據包時,判斷記錄中的該文件的已上傳部分是否包含了該數據包,如果不包含,則該文件的已上傳部分的偏移位置更新為該數據包的結束位置。
[0125]此后,服務器與客戶端建立上傳任務,開始協作上傳該文件。
[0126]步驟208,向客戶端發送第二響應消息,以便客戶端上傳該文件。
[0127]如果服務器判斷到不存在其它上傳任務正在上傳該文件,則向客戶端發送第二響應消息,以便客戶端上傳該文件。
[0128]此后,服務器與客戶端建立上傳任務,開始協作上傳該文件。
[0129]步驟210,接收客戶端在一次上傳任務中發送的數據上傳請求,該數據上傳請求用于請求上傳一個文件的全部或者部分數據;
[0130]服務器可以接收客戶端在上傳任務中發送的數據上傳請求,該數據上傳請求用于請求上傳一個文件的全部或者部分數據。該上傳任務是服務器在步驟206或者步驟208之后與客戶端建立的上傳任務。
[0131]通常來講,當客戶端向服務器上傳一個文件時,會將該文件分割為多個相同或者不同大小的數據塊來分別上傳給服務器,在每次上傳一個數據包時,客戶端都會向服務器發送一個數據上傳請求。在客戶端將該文件分割為多個相同或者不同大小的數據塊時,客戶端可以根據預定大小將該文件分割為相同大小的數據塊,也可以根據當前的網絡狀態將該文件分割為不同大小的數據塊,也即,在網絡狀況較好時,將文件切割為較大的數據塊;在網絡狀態狀況較差時,將文件切割為較小的數據塊。
[0132]當然,在一些實施例中,比如文件的數據量很小時,客戶端可以直接請求傳輸該文件的全部數據,而不需要將該文件分割為很多個數據包。
[0133]步驟212,判斷同時在上傳該文件的其它上傳任務是否已經上傳完畢;如果是,則進入步驟214 ;如果否,則進入步驟216 ;
[0134]在同時存在上傳該文件的其它上傳任務時,服務器在接收到該客戶端的數據上傳請求之后,服務器可以判斷同時在上傳該文件的其它上傳任務是否已經將該文件上傳完畢。比如,服務器接收到客戶端在上傳任務I中發送的數據上傳請求,該數據上傳請求用于請求文件A的第3個數據包,在同時存在上傳該文件的上傳任務2時,服務器可以判斷同時在上傳該文件的上傳任務2是否已經將文件A上傳完畢。
[0135]步驟214,向客戶端發送該文件上傳完畢的消息;
[0136]如果服務器判斷到同時上傳該文件的上傳任務2已經將文件A上傳完畢,則向客戶端發送文件A上傳完畢的消息,也即表示客戶端無需繼續上傳文件A的數據。
[0137]步驟216,接收數據并存儲。
[0138]如果服務器判斷到同時上傳該文件的上傳任務2還未將文件A上傳完畢,則接收客戶端請求上傳的數據并存儲至與該上傳任務對應的存儲位置。具體地講,對于同時上傳一個文件的多個上傳任務,服務器可以將每個上傳任務的上傳數據暫時存儲在各自對應的存儲位置,只有在其中一個上傳任務上傳完畢該文件之后,才會將該文件的所有數據存儲至同一存儲位置。比如,對應首次上傳該文件的任務I的上傳數據可以直接存儲在磁盤,但是對應于其它上傳該文件的任務2、任務3之類的上傳數據可以先存儲入緩存中,該緩存可以是內存。
[0139]另外,如果服務器接收到客戶端2在上傳任務2中發送的數據上傳請求時,則服務器判斷同時上傳該文件的上傳任務I是否已經將文件A上傳完畢。另外,在一些實施例中,上傳任務I和上傳任務2也可以都由一個客戶端建立。對于同時存在3個或者3個以上的上傳任務都在上傳該文件的過程,為本領域技術人員易于思及的內容,不再一一贅述。
[0140]上述步驟210、步驟212、步驟214和步驟216在一個文件的上傳過程中,可能循環多次,比如,該文件被分割為10個數據包上傳,則上述步驟210、步驟212、步驟214和步驟216可能會循環10次以上。
[0141]步驟218,檢測接收到的部分數據是否為該文件的最后部分:
[0142]在步驟216之后,如果服務器接收到的是該文件的一個數據包,則服務器在接收該數據包之后,可以檢測服務器接收到的數據包是否為該文件的最后一個數據包。
[0143]當然,本步驟218也可以在步驟210之后,步驟216之前進行,也可以與步驟216同時進行,本文對此不加具體的限定。
[0144]步驟220,若接收到的部分數據是文件的最后部分,則將文件的所有數據存儲至同一存儲位置,并且生成文件的存儲位置與文件的文件內容的標識信息之間的對應關系。
[0145]如果服務器接收到的數據包是文件的最后一個數據包,則服務器將該文件的所有數據存儲至同一存儲位置,并且生成文件的存儲位置與文件的文件內容的標識信息之間的對應關系。
[0146]比如,如果服務器接收到的數據包是由任務I上傳的,則服務器此時已經將該文件的所有數據存儲入磁盤,服務器可以建立該文件在磁盤中的存儲位置與文件的文件內容的標識信息之間的對應關系;如果服務器接收到的數據包是由任務2或者其它非任務I的上傳任務上傳的,則服務器此時將該文件在緩存中存儲的部分數據與任務I上傳并保存在磁盤中的部分數據合并存儲入磁盤,然后建立該文件在磁盤中的存儲位置與文件的文件內容的標識信息之間的對應關系。
[0147]在一個具體的示例中,客戶端I首先向服務器發送文件上傳請求,用于請求上傳文件A,然后服務器判斷沒有其它上傳任務在上傳該文件A,則與客戶端I建立任務1,客戶端I將該文件A根據自身網絡狀況分割為10個數據包,然后依次發送數據上傳請求給服務器,請求上傳文件A中的這10個數據包中某一個數據包。當客戶端I正在向服務器上傳第3個數據包時,客戶端2向服務器發送文件上傳請求,也用于請求上傳文件A,然后服務器在根據文件上傳請求中攜帶的文件A的內容標識信息判斷到任務I也在上傳該文件A,則向客戶端2反饋客戶端I已經上傳的第2個數據包在文件A中的偏移位置,以便與客戶端2建立任務2,客戶端2將該文件A中從所述偏移位置開始的未上傳部分根據自身網絡狀況分割為5個數據包,然后依次發送數據上傳請求給服務器,以請求上傳這5個數據包中的某一個數據包。在之后的過程中,服務器每次接收到客戶端I或者客戶端2的數據上傳請求時,都判斷另一個客戶端對應的上傳任務是否已經上傳完畢,如果是,則向客戶端I或者客戶端2發送文件A已經上傳完畢的消息。
[0148]綜上所述,本實施例提供的文件上傳方法,通過在接收到客戶端的數據上傳請求時,判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢,來選擇完成本次上傳任務或者繼續接收數據,解決了現有技術對存儲空間和上傳流量耗費較多的問題,達到了在相同或者不同的客戶端同時上傳同一文件而導致沖突問題時,服務器總是只存儲一份該文件,而且只要有一個客戶端上傳該文件成功,則其他客戶端無需繼續上傳該文件,從而節省了其他客戶端的上傳流量的效果。另外,服務器在接收到客戶端發送的文件上傳請求時,可以通過該文件上傳請求攜帶的文件的內容標識信息來判斷是否存在其它上傳任務正在同時上傳該文件,然后選擇向客戶端反饋第一響應消息或者第二響應消息來建立上傳任務,可以達到進一步地節省客戶端的上傳流量的效果。
[0149]在實施例二中,同時上傳一個文件的各個上傳任務之間,除了在建立任務時的處理方式不同外,后續上傳過程還是各自獨立的。為了進一步地節省客戶端的上傳流量,請繼續參考如下實施例。
[0150]實施例三
[0151]請參考圖4,其示出了本發明實施例三提供的文件上傳方法的方法流程圖。本實施例主要以該文件上傳方法應用于圖1所示的服務器中來舉例說明,該文件上傳方法用于多個上傳任務同時上傳同一文件時的文件上傳過程,與實施例二相比,本實施例由步驟316、步驟318和步驟320來替代步驟216,以實現多個上傳任務協作上傳同一文件。該文件上傳方法包括:
[0152]步驟302,接收客戶端發送的文件的內容標識信息;
[0153]在客戶端需要上傳文件時,客戶端向服務器發送文件上傳請求,該文件上傳請求攜帶有該文件的內容標識信息,比如該文件的MD5(Message DigestAlgorithm MD5,消息摘要算法第五版)值。由于文件的內容標識信息是根據文件包括的內容獲取得到的,所以相同的文件具有相同的內容標識信息,不同的文件具有不同的內容標識信息。
[0154]該文件上傳請求還可以攜帶有文件的文件信息和客戶端的標識信息,其中,文件信息可以包括文件名、文件格式和文件大小之類的信息;客戶端的標識信息可以是一組用戶名或者密碼、IMEI(International Mobile Equipment Identity,國際移動設備身份碼)、UUID (Universally Unique Identifier,通用唯一識別碼)或者 GUID (Globally UniqueIdentifier,全球唯一標識符)。
[0155]需要說明的是,文件上傳請求可以用于請求上傳不止一個文件,比如,一個文件上傳請求中同時請求上傳三個文件。但在本文中,為了簡化描述,均以一個文件上傳請求用于請求上傳一個文件為例來進行描述。
[0156]步驟304,根據文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件;如果是,則進入步驟306 ;如果否,則進入步驟308 ;
[0157]服務器在接收客戶端發送的文件上傳請求之后,服務器根據該文件上傳請求中攜帶的文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件,比如,服務器可以判斷正在進行的上傳任務中,是否存在上傳任務正在上傳與該內容標識信息相對應的文件。
[0158]易于思及的,服務器在進行本步驟之前,也可以先根據該文件的內容標識信息判斷本地是否已經存儲有該文件,如果是,則直接進入步驟314 ;如果否,再執行本步驟。
[0159]步驟306,向客戶端發送第一響應消息,第一響應消息攜帶有其它上傳任務中該文件的已上傳部分的偏移位置,以便客戶端上傳該文件中的未上傳部分;
[0160]如果服務器判斷到存在其它上傳任務正在上傳該文件,則服務器向客戶端發送第一響應消息,第一響應消息攜帶有其它上傳任務中該文件的已上傳部分的偏移位置。具體地講,該文件的已上傳部分的偏移位置是指該文件的已上傳數據在全部數據中相對于文件頭的偏移位置,比如,文件的大小為108KB,該文件的已上傳數據為80KB,則該文件的已上傳數據在全部數據中相對于文件頭的偏移位置為80KB。此后,客戶端可以從相對于該文件的文件頭偏移80KB的位置開始,繼續上傳該文件的剩余數據,也即該文件中的未上傳部分。
[0161]由于除了本次上傳任務,同時在上傳該文件的其它上傳任務可能為兩個或者兩個以上,此時,該文件的已上傳部分的偏移位置可以是其它上傳任務中最早的上傳任務所對應的該文件的已上傳部分的偏移位置;也可以是其它上傳任務中上傳進度最快的上傳任務所對應的該文件的已上傳部分的偏移位置。
[0162]但是為了盡可能地節省客戶端的上傳流量,優選采用其它上傳任務中上傳進度最快的上傳任務所對應的該文件的已上傳部分的偏移位置作為該文件的已上傳部分的偏移位置。在具體實現時,服務器可以記錄其它上傳任務中上傳進度最快的上傳任務所對應的該文件的已上傳部分的偏移位置。比如,服務器每次接收完畢一個上傳任務對于該文件上傳的一個數據包時,判斷記錄中的該文件的已上傳部分是否包含了該數據包,如果不包含,則該文件的已上傳部分的偏移位置更新為該數據包的結束位置。
[0163]此后,服務器與客戶端建立上傳任務,開始協作上傳該文件。
[0164]步驟308,向客戶端發送第二響應消息,以便客戶端上傳該文件。
[0165]如果服務器判斷到不存在其它上傳任務正在上傳該文件,則向客戶端發送第二響應消息,以便客戶端上傳該文件。
[0166]此后,服務器與客戶端建立上傳任務,開始協作上傳該文件。
[0167]需要補充說明的是,為了便于客戶端下載,服務器在接收到客戶端發送文件上傳請求中的文件的內容標識信息之后,還可以生成與該文件的內容標識信息所對應的提取碼,并存儲該文件的內容標識信息和該提取碼之間的對應關系。然后,服務器向客戶端發送還攜帶有提取碼的第一響應消息或者第二響應消息;這樣,客戶端在上傳該文件之后,可以根據提取碼下載該文件。其中,文件的內容標識信息和提取碼之間的對應關系可以是多對一的關系,也即,如果客戶端發送的文件上傳請求用于請求上傳兩個或者兩個以上的文件,服務器可以生成同時與這兩個或者兩個以上的文件的內容標識信息對應的一個提取碼,以便客戶端之后可以根據這一個提取碼同時下載這兩個或者兩個以上的文件。
[0168]另外,客戶端利用提取碼下載文件的過程可以是:第一,服務器接收客戶端發送的提取碼;第二,服務器根據預先存儲的文件的內容標識信息和提取碼之間的對應關系,查詢到至少一個文件的內容標識信息;第三,服務器根據至少一個文件的內容標識信息查詢對應文件的存儲位置,并反饋該存儲位置給客戶端;第四,客戶端根據服務器反饋的存儲位置下載文件。
[0169]步驟310,接收客戶端在一次上傳任務中發送的數據上傳請求,該數據上傳請求用于請求上傳一個文件的全部或者部分數據;
[0170]服務器可以接收客戶端在上傳任務中發送的數據上傳請求,該數據上傳請求用于請求上傳一個文件的全部或者部分數據。該上傳任務是服務器在步驟306或者步驟308之后與客戶端建立的上傳任務。
[0171]通常來講,當客戶端向服務器上傳一個文件時,會將該文件分割為多個相同或者不同大小的數據塊來分別上傳給服務器,在每次上傳一個數據包時,客戶端都會向服務器發送一個數據上傳請求。在客戶端將該文件分割為多個相同或者不同大小的數據塊時,客戶端可以根據預定大小將該文件分割為相同大小的數據塊,也可以根據當前的網絡狀態將該文件分割為不同大小的數據塊,也即,在網絡狀況較好時,將文件切割為較大的數據塊;在網絡狀態狀況較差時,將文件切割為較小的數據塊。
[0172]當然,在一些實施例中,比如文件的數據量很小時,客戶端可以直接請求傳輸該文件的全部數據,而不需要將該文件分割為很多個數據包。
[0173]步驟312,判斷同時在上傳該文件的其它上傳任務是否已經上傳完畢;如果是,則進入步驟314 ;如果否,則進入步驟316 ;
[0174]在同時存在上傳該文件的其它上傳任務時,服務器在接收到該客戶端的數據上傳請求之后,服務器可以判斷同時在上傳該文件的其它上傳任務是否已經將該文件上傳完畢。比如,服務器接收到客戶端在上傳任務3中發送的數據上傳請求,該數據上傳請求用于請求文件A的第3個數據包,在同時存在上傳該文件的任務I和任務2時,服務器可以判斷同時在上傳該文件的任務I和任務2是否已經將文件A上傳完畢。
[0175]步驟314,向客戶端發送該文件上傳完畢的消息;
[0176]如果服務器判斷到同時上傳該文件的任務I或任務2已經將文件A上傳完畢,則向客戶端發送文件A上傳完畢的消息,也即表示客戶端無需繼續上傳文件A的數據。
[0177]步驟316,繼續判斷同時在上傳該文件的其它上傳任務中該文件的已上傳部分是否已經包含客戶端請求上傳的部分數據;如果是,則進入步驟318 ;如果否,則進入步驟320 ;
[0178]如果服務器判斷到同時上傳該文件的任務I和任務2還未將文件A上傳完畢,則服務器繼續判斷同時在上傳該文件的任務I和任務2中該文件的已上傳部分是否已經包含客戶端請求上傳的數據包。優選地,此處的該文件的已上傳部分是指任務I和任務2中上傳進度最快的一個上傳任務中該文件的已上傳部分,比如,假設任務2的上傳進度最快,則服務器判斷同時在上傳該文件的任務2中該文件的已上傳部分是否已經包含客戶端請求上傳的數據包。
[0179]步驟318,向客戶端發送第三響應消息,第三響應消息攜帶有其它上傳任務中該文件的已上傳部分的偏移位置,以便客戶端上傳文件中的未上傳部分;
[0180]如果服務器判斷到同時上傳該文件的任務2中該文件的已上傳部分已經包含客戶端請求上傳的數據包,則服務器向客戶端發送第三響應消息,第三響應消息攜帶有其它上傳任務(任務2)中該文件的已上傳部分的偏移位置,以便客戶端上傳文件中的未上傳部分。
[0181]此后,客戶端重新提交數據上傳請求,用于請求從該文件的已上傳部分的偏移位置開始的另外一個數據包。
[0182]步驟320,接收該部分數據并存儲;
[0183]如果服務器判斷到同時上傳該文件的任務2中該文件的已上傳部分還未包含客戶端請求上傳的數據包,則服務器接收客戶端請求上傳的數據包并存儲至與該上傳任務對應的存儲位置。具體地講,對于同時上傳一個文件的多個上傳任務,服務器可以將每個上傳任務的上傳數據暫時存儲在各自對應的存儲位置,只有在其中一個上傳任務上傳完畢該文件之后,才會將該文件的所有數據存儲至同一存儲位置。比如,對應首次上傳該文件的任務I的上傳數據可以直接存儲在磁盤,但是對應于其它上傳該文件的任務2、任務3之類的上傳數據可以先存儲入緩存中,該緩存可以是內存。
[0184]上述步驟310至320在一個文件的上傳過程中,可能循環多次。
[0185]步驟322,檢測接收到的部分數據是否為該文件的最后部分:
[0186]在步驟322之后,如果服務器接收到的是該文件的一個數據包,則服務器在接收該數據包之后,可以檢測服務器接收到的數據包是否為該文件的最后一個數據包。
[0187]當然,本步驟322也可以在步驟310之后,步驟320之前進行,也可以與步驟320同時進行,本文對此不加具體的限定。
[0188]步驟324,若接收到的部分數據是文件的最后部分,則將文件的所有數據存儲至同一存儲位置,并且生成文件的存儲位置與文件的文件內容的標識信息之間的對應關系。
[0189]如果服務器接收到的數據包是文件的最后一個數據包,則服務器將該文件的所有數據存儲至同一存儲位置,并且生成文件的存儲位置與文件的文件內容的標識信息之間的對應關系。在服務器將該文件的所有數據存儲至同一存儲位置時,可能需要從與不同的上傳任務所對應的存儲位置獲取該文件中的一部分數據。同時,該同一存儲位置通常是磁盤,不同的上傳任務所對應的存儲位置可能是磁盤或者內容。
[0190]綜上所述,與實施例二相比,本實施例提供的文件上傳方法,通過實時判斷客戶端請求上傳的部分數據是否已經包含在其它上傳任務中該文件的已上傳部分中,來選擇重新上傳該文件的未上傳部分或者接收該部分數據,使得每個上傳任務在上傳文件中的數據時,總是上傳當前情況下該文件的未上傳部分,可以是每個上傳任務協作上傳一個文件的各部分數據,最終達到進一步地節省客戶端的上傳流量的效果。
[0191]實施例四至實施例九為本發明裝置實施例,可以用于執行本發明方法實施例。對于本發明裝置實施例中未披露的技術細節,請參照本發明方法實施例。
[0192]實施例四
[0193]請參考圖5,其示出了本發明實施例四提供的服務器的結構方框圖,該服務器包括:請求接收模塊420、任務判斷模塊440、完畢反饋模塊460和數據存儲模塊480。
[0194]請求接收模塊420,用于接收客戶端在一次上傳任務中發送的數據上傳請求,所述數據上傳請求用于請求上傳一個文件的全部或者部分數據。
[0195]任務判斷模塊440,用于判斷同時在上傳所述請求接收模塊420接收到的數據上傳請求請求上傳的所述文件的其它上傳任務是否已經上傳完畢。
[0196]完畢反饋模塊460,用于如果所述任務判斷模塊440的判斷結果為是,則向所述客戶端發送所述文件上傳完畢的消息;
[0197]數據存儲模塊480,用于如果所述任務判斷模塊440的判斷結果為否,則接收所述數據并存儲。
[0198]綜上所述,本實施例提供的服務器,通過在接收到客戶端的數據上傳請求時,判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢,來選擇完成本次上傳任務或者繼續接收數據,解決了現有技術對存儲空間和上傳流量耗費較多的問題,達到了在相同或者不同的客戶端同時上傳同一文件而導致沖突問題時,服務器總是只存儲一份該文件,而且只要有一個客戶端上傳該文件成功,則其他客戶端無需繼續上傳該文件,從而節省了其他客戶端的上傳流量的效果。
[0199]實施例五
[0200]請參考圖6,其示出了本發明實施例五提供的服務器的結構方框圖。與實施例三相t匕,該服務器不僅包括:請求接收模塊420、任務判斷模塊440、完畢反饋模塊460和數據存儲模塊480 ;還包括標識接收模塊412、沖突檢測模塊414、第一響應模塊416和第二響應模塊 418。
[0201]標識接收模塊412,用于接收客戶端發送的一個文件的內容標識信息。
[0202]沖突檢測模塊414,用于根據所述標識接收模塊412接收到的文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件。
[0203]第一響應模塊416,用于如果沖突檢測模塊414的判斷結果為是,則向所述客戶端發送第一響應消息,所述第一響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置,以便所述客戶端上傳所述文件中的未上傳部分。
[0204]第二響應模塊418,用于如果所述沖突檢測模塊414的判斷結果為否,則向所述客戶端發送第二響應消息,以便所述客戶端上傳所述文件。
[0205]請求接收模塊420,用于接收客戶端在收到第一響應模塊416或者第二響應模塊418發送的響應消息之后,在上傳所述文件的上傳任務中發送的數據上傳請求,所述數據上傳請求用于請求上傳所述文件的全部或者部分數據。
[0206]任務判斷模塊440,用于如果沖突檢測模塊414的判斷結果為是時,判斷同時在上傳所述請求接收模塊420接收到的數據上傳請求用于請求上傳的所述文件的其它上傳任務是否已經上傳完畢。
[0207]完畢反饋模塊460,用于如果所述任務判斷模塊440的判斷結果為是,則向所述客戶端發送所述文件上傳完畢的消息;
[0208]數據存儲模塊480,用于如果所述任務判斷模塊440的判斷結果為否,則接收所述數據并存儲。
[0209]如果所述請求接收模塊420接收到的數據上傳請求用于請求上傳一個文件的部分數據,所述服務器,還可以包括:數據檢測模塊492和關系生成模塊494。
[0210]所述數據檢測模塊492,用于檢測所述數據存儲模塊480存儲的部分數據是否為所述文件的最后部分:
[0211]所述關系生成模塊494,用于若所述數據檢測模塊492檢測到部分數據是所述文件的最后部分,則將所述文件的所有數據存儲至同一存儲位置,并且生成所述文件的存儲位置與所述文件的文件內容的標識信息之間的對應關系。
[0212]需要補充說明的是,在上述描述中,若其它上傳任務為兩個或者兩個以上,則所述其它上傳任務中所述文件的已上傳部分的偏移位置為:
[0213]所述其它上傳任務中最早的上傳任務所對應的所述文件的已上傳部分的偏移位置;
[0214]或者,所述其它上傳任務中上傳進度最快的上傳任務所對應的所述文件的已上傳部分的偏移位置。
[0215]綜上所述,本實施例提供的服務器,通過在接收到客戶端的數據上傳請求時,判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢,來選擇完成本次上傳任務或者繼續接收數據,解決了現有技術對存儲空間和上傳流量耗費較多的問題,達到了在相同或者不同的客戶端同時上傳同一文件而導致沖突問題時,服務器總是只存儲一份該文件,而且只要有一個客戶端上傳該文件成功,則其他客戶端無需繼續上傳該文件,從而節省了其他客戶端的上傳流量的效果。另外,服務器在接收到客戶端發送的文件上傳請求時,可以通過該文件上傳請求攜帶的文件的內容標識信息來判斷是否存在其它上傳任務正在同時上傳該文件,然后選擇向客戶端反饋第一響應消息或者第二響應消息來建立上傳任務,可以達到進一步地節省客戶端的上傳流量的效果。
[0216]實施例六
[0217]請參考圖7,其示出了本發明實施例六提供的服務器的結構方框圖。與實施例五相t匕,該服務器還包括提取碼生成模塊413,同時該服務器中的數據存儲模塊480還包括重復判斷單元482、第三響應單元484和數據存儲單元486。
[0218]標識接收模塊412,用于接收客戶端發送的一個文件的內容標識信息。
[0219]提取碼生成模塊413,用于生成與所述標識接收模塊412接收到的文件的內容標識信息所對應的提取碼,并存儲所述文件的內容標識信息和所述提取碼之間的對應關系;
[0220]沖突檢測模塊414,用于根據所述標識接收模塊412接收到的文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件。
[0221]第一響應模塊416,用于如果所述沖突檢測模塊414的判斷結果為是,則向所述客戶端發送第一響應消息,所述第一響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置,以便所述客戶端上傳所述文件中的未上傳部分。同時,所述第一響應模塊416還具體用于向所述客戶端發送還攜帶有所述提取碼的第一響應消息,以便所述客戶端在上傳所述文件之后,根據所述提取碼下載所述文件。
[0222]第二響應模塊418,用于如果所述沖突檢測模塊414的判斷結果為否,則向所述客戶端發送第二響應消息,以便所述客戶端上傳所述文件。所述第二響應模塊418,具體用于向所述客戶端發送攜帶有所述提取碼的第二響應消息,以便所述客戶端在上傳所述文件之后,根據所述提取碼下載所述文件。
[0223]請求接收模塊420,用于接收客戶端在收到第一響應模塊416或者第二響應模塊418發送的響應消息之后發送的數據上傳請求,所述數據上傳請求用于請求上傳所述文件的全部或者部分數據。
[0224]任務判斷模塊440,用于如果沖突檢測模塊414的判斷結果為是時,判斷同時在上傳所述請求接收模塊420接收到的數據上傳請求請求上傳的所述文件的其它上傳任務是否已經上傳完畢。
[0225]完畢反饋模塊460,用于如果所述任務判斷模塊440的判斷結果為是,則向所述客戶端發送所述文件上傳完畢的消息;
[0226]數據存儲模塊480,用于如果所述任務判斷模塊440的判斷結果為否,則接收所述數據并存儲。
[0227]具體地講,如果所述請求接收模塊420接收到的數據上傳請求用于請求上傳一個文件的部分數據,
[0228]所述重復判斷單元482,用于判斷同時在上傳所述文件的其它上傳任務中所述文件的已上傳部分是否已經包含所述客戶端請求上傳的部分數據;
[0229]所述第三響應單元484,用于如果所述重復判斷單元482的判斷結果為是,則向所述客戶端發送第三響應消息,所述第三響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置,以便所述客戶端上傳所述文件中的未上傳部分;
[0230]所述數據存儲單元486,用于如果所述重復判斷單元482的判斷結果為否,則執行所述接收所述數據并存儲的步驟。
[0231]另外,如果所述請求接收模塊420接收到的數據上傳請求用于請求上傳一個文件的部分數據,所述服務器,還可以包括:數據檢測模塊492和關系生成模塊494。
[0232]所述數據檢測模塊492,用于檢測所述數據存儲模塊480存儲的部分數據是否為所述文件的最后部分:
[0233]所述關系生成模塊494,用于若所述數據檢測模塊492檢測到部分數據是所述文件的最后部分,則將所述文件的所有數據存儲至同一存儲位置,并且生成所述文件的存儲位置與所述文件的文件內容的標識信息之間的對應關系。
[0234]需要補充說明的是,在上述描述中,若其它上傳任務為兩個或者兩個以上,則所述其它上傳任務中所述文件的已上傳部分的偏移位置為:
[0235]所述其它上傳任務中最早的上傳任務所對應的所述文件的已上傳部分的偏移位置;
[0236]或者,所述其它上傳任務中上傳進度最快的上傳任務所對應的所述文件的已上傳部分的偏移位置。
[0237]綜上所述,與實施例五相比,本實施例提供的服務器,通過實時判斷客戶端請求上傳的部分數據是否已經包含在其它上傳任務中該文件的已上傳部分中,來選擇重新上傳該文件的未上傳部分或者接收該部分數據,使得每個上傳任務在上傳文件中的數據時,總是上傳當前情況下該文件的未上傳部分,可以是每個上傳任務協作上傳一個文件的各部分數據,最終達到進一步地節省客戶端的上傳流量的效果。
[0238]實施例七
[0239]請參考圖8,其示出了本發明實施例七提供的客戶端的結構方框圖。該客戶端包括請求發送模塊520、停止發送模塊540和正常發送模塊560。
[0240]請求發送模塊520,用于向服務器發送數據上傳請求,所述數據上傳請求用于請求上傳一個文件的全部或者部分數據。
[0241]停止發送模塊540,用于在接收到所述服務器發送的所述文件上傳完畢的消息時,停止發送所述文件的全部或者部分數據。所述文件為所述請求發送模塊520請求上傳的文件。
[0242]正常發送模塊560,用于在未接收到所述服務器發送的所述文件上傳完畢的消息時,發送所述文件的全部或者部分數據。
[0243]綜上所述,本實施例提供的客戶端,通過由服務器接收到客戶端的數據上傳請求時,判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢,來選擇完成本次上傳任務或者繼續接收數據,解決了現有技術對存儲空間和上傳流量耗費較多的問題,達到了在相同或者不同的客戶端同時上傳同一文件而導致沖突問題時,服務器總是只存儲一份該文件,而且只要有一個客戶端上傳該文件成功,則其他客戶端無需繼續上傳該文件,從而節省了其他客戶端的上傳流量的效果。
[0244]實施例八
[0245]請參考圖9,其示出了本發明實施例八提供的客戶端的結構方框圖。與實施例七相t匕,該客戶端不僅包括請求發送模塊520、停止發送模塊540和正常發送模塊560,還包括有標識發送模塊512、第一接收模塊514、第二接收模塊516和第三接收模塊580。
[0246]所述標識發送模塊512,用于向所述服務器發送所述文件的內容標識消息,以便所述服務器根據所述文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件;
[0247]所述第一接收模塊514,用于接收所述服務器在根據所述標識發送模塊512發送的所述文件的內容標識信息判斷到存在其它上傳任務正在上傳相同的文件之后發送的第一響應消息,所述第一響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置;
[0248]所述請求發送模塊520,具體用于在第一接收模塊514接收到第一響應消息之后,向服務器發送數據上傳請求,所述數據上傳請求用于請求上傳所述文件中從所述偏移位置開始的部分數據。
[0249]所述第二接收模塊516,用于接收所述服務器在根據所述標識發送模塊512發送的所述文件的內容標識信息判斷到不存在其它上傳任務正在上傳相同的文件之后發送的第二響應消息;
[0250]所述請求發送模塊520,具體用于在第二接收模塊516接收到第二響應消息之后,向服務器發送數據上傳請求,所述數據上傳請求用于請求上傳所述文件中從文件頭開始的部分數據。
[0251]所述第三接收模塊580,用于接收所述服務器在判斷到其它上傳任務中所述文件的已上傳部分是否已經包含客戶端請求上傳的部分數據之后發送的第三響應消息,所述第三響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置;
[0252]所述請求發送模塊520,還用于向所述服務器再次發送數據上傳請求,所述數據上傳請求用于請求上傳所述文件中從所述偏移位置開始的部分數據。
[0253]優選地,所述客戶端,還包括:提取碼接收模塊592和下載請求發送模塊594。其中,提取碼接收模塊592,用于接收所述服務器發送的提取碼;下載請求發送模塊594,用于根據所述提取碼接收模塊592接收到的提取碼向所述服務器發送文件下載請求。
[0254]綜上所述,本實施例提供的客戶端,通過由服務器接收到客戶端的數據上傳請求時,判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢,來選擇完成本次上傳任務或者繼續接收數據,解決了現有技術對存儲空間和上傳流量耗費較多的問題,達到了在相同或者不同的客戶端同時上傳同一文件而導致沖突問題時,服務器總是只存儲一份該文件,而且只要有一個客戶端上傳該文件成功,則其他客戶端無需繼續上傳該文件,從而節省了其他客戶端的上傳流量的效果。另外,通過在發送一個文件時首先向服務器發送該文件的內容標識信息,可以通過由服務器根據該文件的內容標識信息來判斷是否存在其它上傳任務正在同時上傳該文件,然后選擇向客戶端反饋第一響應消息或者第二響應消息來建立上傳任務,可以達到進一步地節省客戶端的上傳流量的效果。
[0255]實施例九
[0256]請參考圖10,其示出了本發明實施例九提供的文件上傳系統的結構方框圖。該文件系統包括服務器120和客戶端140。
[0257]服務器120可以是實施例四至實施例六任一實施例提供的服務器。
[0258]客戶端140可以是實施例七或者實施例八提供的客戶端。
[0259]綜上所述,本實施例提供的文件上傳系統,通過由服務器接收到客戶端的數據上傳請求時,判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢,來選擇完成本次上傳任務或者繼續接收數據,解決了現有技術對存儲空間和上傳流量耗費較多的問題,達到了在相同或者不同的客戶端同時上傳同一文件而導致沖突問題時,服務器總是只存儲一份該文件,而且只要有一個客戶端上傳該文件成功,則其他客戶端無需繼續上傳該文件,從而節省了其他客戶端的上傳流量的效果。
[0260]需要說明的是:上述實施例提供的服務器在上傳文件過程中,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據需要而將上述功能分配由不同的功能模塊完成,即將設備的內部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的服務器與文件上傳方法實施例屬于同一構思,其具體實現過程詳見方法實施例,這里不再贅述。
[0261 ] 上述本發明實施例序號僅僅為了描述,不代表實施例的優劣。
[0262]本領域普通技術人員可以理解實現上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,上述提到的存儲介質可以是只讀存儲器,磁盤或光盤等。
[0263]以上所述僅為本發明的較佳實施例,并不用以限制本發明,凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。
【權利要求】
1.一種文件上傳方法,其特征在于,所述方法包括: 接收客戶端在一次上傳任務中發送的數據上傳請求,所述數據上傳請求用于請求上傳一個文件的全部或者部分數據; 判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢; 如果是,則向所述客戶端發送所述文件上傳完畢的消息; 如果否,則接收所述數據并存儲。
2.根據權利要求1所述的文件上傳方法,其特征在于,所述接收客戶端在一次上傳任務中發送的數據上傳請求之前,還包括: 接收客戶端發送的所述文件的內容標識信息; 根據所述文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件; 如果是,向所述客戶端發送第一響應消息,所述第一響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置,以便所述客戶端上傳所述文件中的未上傳部分; 如果否,向所述客戶端發送第二響應消息,以便所述客戶端上傳所述文件。
3.根據權利要求1所述的文件上傳方法,其特征在于,所述數據上傳請求用于請求上傳一個文件的部分數據, 在判斷到同時在上傳所述文件的其它上傳任務還未上傳完畢之后,所述接收所述數據并存儲之前,還包括: 判斷同時在上傳所述文件的其它上傳任務中所述文件的已上傳部分是否已經包含所述客戶端請求上傳的部分數據; 如果是,則向所述客戶端發送第三響應消息,所述第三響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置,以便所述客戶端上傳所述文件中的未上傳部分;如果否,則執行所述接收所述數據并存儲的步驟。
4.根據權利要求1至3任一所述的文件上傳方法,其特征在于,所述數據上傳請求用于請求上傳一個文件的部分數據, 所述接收所述數據并存儲之后,還包括: 檢測所述部分數據是否為所述文件的最后部分: 若所述部分數據是所述文件的最后部分,則將所述文件的所有數據存儲至同一存儲位置,并且生成所述文件的存儲位置與所述文件的文件內容的標識信息之間的對應關系。
5.根據權利要求2所述的文件上傳方法,其特征在于,所述接收客戶端發送的所述文件的內容標識信息之后,還包括: 生成與所述文件的內容標識信息所對應的提取碼,并存儲所述文件的內容標識信息和所述提取碼之間的對應關系; 所述向所述客戶端發送第一響應消息,對應包括: 向所述客戶端發送還攜帶有所述提取碼的第一響應消息,以便所述客戶端在上傳所述文件之后,根據所述提取碼下載所述文件; 所述向所述客戶端發送第二響應消息,對應包括: 向所述客戶端發送攜帶有所述提取碼的第二響應消息,以便所述客戶端在上傳所述文件之后,根據所述提取碼下載所述文件。
6.根據權利要求2或3所述的文件上傳方法,其特征在于,若其它上傳任務為兩個或者兩個以上,則所述其它上傳任務中所述文件的已上傳部分的偏移位置為: 所述其它上傳任務中最早的上傳任務所對應的所述文件的已上傳部分的偏移位置;或者,所述其它上傳任務中上傳進度最快的上傳任務所對應的所述文件的已上傳部分的偏移位置。
7.一種服務器,其特征在于,所述服務器包括: 請求接收模塊,用于接收客戶端在一次上傳任務中發送的數據上傳請求,所述數據上傳請求用于請求上傳一個文件的全部或者部分數據; 任務判斷模塊,用于判斷同時在上傳所述文件的其它上傳任務是否已經上傳完畢;完畢反饋模塊,用于如果所述任務判斷模塊的判斷結果為是,則向所述客戶端發送所述文件上傳完畢的消息; 數據存儲模塊,用于如果所述任務判斷模塊的判斷結果為否,則接收所述數據并存儲。
8.根據權利要求7所述的服務器,其特征在于,所述服務器,還包括: 標識接收模塊、沖突檢測模塊、第一響應模塊和第二響應模塊; 所述標識接收模塊,用于接收客戶端發送的所述文件的內容標識信息; 所述沖突檢測模塊,用于根據所述文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件; 所述第一響應模塊,用于如果所述沖突檢測模塊的判斷結果為是,則向所述客戶端發送第一響應消息,所述第一響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置,以便所述客戶端上傳所述文件中的未上傳部分; 所述第二響應模塊,用于如果所述沖突檢測模塊的判斷結果為否,則向所述客戶端發送第二響應消息,以便所述客戶端上傳所述文件。
9.根據權利要求7所述的服務器,其特征在于,所述請求接收模塊接收到的數據上傳請求用于請求上傳一個文件的部分數據, 所述數據存儲模塊,具體包括:重復判斷單元、第三響應單元和數據存儲單元; 所述重復判斷單元,用于判斷同時在上傳所述文件的其它上傳任務中所述文件的已上傳部分是否已經包含所述客戶端請求上傳的部分數據; 所述第三響應單元,用于如果所述重復判斷單元的判斷結果為是,則向所述客戶端發送第三響應消息,所述第三響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置,以便所述客戶端上傳所述文件中的未上傳部分; 所述數據存儲單元,用于如果所述重復判斷單元的判斷結果為否,則執行所述接收所述數據并存儲的步驟。
10.根據權利要求7至9任一所述的服務器,其特征在于,所述請求接收模塊接收到的數據上傳請求用于請求上傳一個文件的部分數據, 所述服務器,還包括: 數據檢測模塊和關系生成模塊; 所述數據檢測模塊,用于檢測所述數據存儲模塊存儲的部分數據是否為所述文件的最后部分: 所述關系生成模塊,用于若所述數據檢測模塊檢測到部分數據是所述文件的最后部分,則將所述文件的所有數據存儲至同一存儲位置,并且生成所述文件的存儲位置與所述文件的文件內容的標識信息之間的對應關系。
11.根據權利要求8所述的服務器,其特征在于,所述服務器,還包括: 提取碼生成模塊; 所述提取碼生成模塊,用于生成與所述文件的內容標識信息所對應的提取碼,并存儲所述文件的內容標識信息和所述提取碼之間的對應關系; 所述第一響應模塊,具體用于向所述客戶端發送還攜帶有所述提取碼的第一響應消息,以便所述客戶端在上傳所述文件之后,根據所述提取碼下載所述文件; 所述第二響應模塊,具體用于向所述客戶端發送攜帶有所述提取碼的第二響應消息,以便所述客戶端在上傳所述文件之后,根據所述提取碼下載所述文件。
12.根據權利要求8或9所述的服務器,其特征在于,若其它上傳任務為兩個或者兩個以上,則所述其它上傳任務中所述文件的已上傳部分的偏移位置為: 所述其它上傳任務中最早的上傳任務所對應的所述文件的已上傳部分的偏移位置;或者,所述其它上傳任務中上傳進度最快的上傳任務所對應的所述文件的已上傳部分的偏移位置。
13.—種客戶端,其特征在于,包括: 請求發送模塊,用于向服務器發送數據上傳請求,所述數據上傳請求用于請求上傳一個文件的全部或者部分數據; 停止發送模塊,用于在接收到所述服務器發送的所述文件上傳完畢的消息時,停止發送所述文件的全部或者部分數據; 正常發送模塊,用于在未接收到所述服務器發送的所述文件上傳完畢的消息時,發送所述文件的全部或者部分數據。
14.根據權利要求13所述的客戶端,其特征在于,所述客戶端,還包括: 標識發送模塊、第一接收模塊和第二接收模塊; 所述標識發送模塊,用于向所述服務器發送所述文件的內容標識消息,以便所述服務器根據所述文件的內容標識信息判斷是否存在其它上傳任務正在上傳相同的文件; 所述第一接收模塊,用于接收所述服務器在判斷到存在其它上傳任務正在上傳相同的文件之后發送的第一響應消息,所述第一響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置; 所述請求發送模塊,具體用于在第一接收模塊接收到第一響應消息之后,向服務器發送數據上傳請求,所述數據上傳請求用于請求上傳所述文件中從所述偏移位置開始的部分數據。 所述第二接收模塊,用于接收所述服務器在判斷到不存在其它上傳任務正在上傳相同的文件之后發送的第二響應消息; 所述請求發送模塊,具體用于在第二接收模塊接收到第二響應消息之后,向服務器發送數據上傳請求,所述數據上傳請求用于請求上傳所述文件中從文件頭開始的部分數據。。
15.根據權利要求13所述的客戶端,其特征在于,所述客戶端,還包括: 第三接收模塊; 所述第三接收模塊,用于接收所述服務器在判斷到其它上傳任務中所述文件的已上傳部分是否已經包含客戶端請求上傳的部分數據之后發送的第三響應消息,所述第三響應消息攜帶有其它上傳任務中所述文件的已上傳部分的偏移位置; 所述請求發送模塊,還用于向所述服務器再次發送數據上傳請求,所述數據上傳請求用于請求上傳所述文件中從所述偏移位置開始的部分數據。
16.根據權利要求13至15任一所述客戶端,其特征在于,所述客戶端,還包括: 提取碼接收模塊,用于接收所述服務器發送的提取碼; 下載請求發送模塊,用于根據所述提取碼向所述服務器發送文件下載請求。
17.一種文件上傳系統,其特征在于,其包括如權利要求7至12任一所述的服務器和如權利要求13至16任一所`述的客戶端。
【文檔編號】H04L29/08GK103685332SQ201210318768
【公開日】2014年3月26日 申請日期:2012年8月31日 優先權日:2012年8月31日
【發明者】林婕 申請人:騰訊科技(深圳)有限公司