本發(fā)明涉及計(jì)算機(jī)云存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種云端存儲(chǔ)數(shù)據(jù)的方法及服務(wù)器。
背景技術(shù):
目前,市場(chǎng)上的各類云存儲(chǔ)產(chǎn)品越來越多,許多科技公司都推出了自身的云存儲(chǔ)產(chǎn)品,越來越多的用戶和企業(yè)也傾向于將數(shù)據(jù)存儲(chǔ)在云存儲(chǔ)上。隨著用戶數(shù)量以及云存儲(chǔ)上的數(shù)據(jù)量的不斷增長(zhǎng),云存儲(chǔ)上數(shù)據(jù)存儲(chǔ)和管理的開銷也越來越大。由于在每年驟增的數(shù)據(jù)中有許多數(shù)據(jù)是重復(fù)的,如系統(tǒng)鏡像、電影或歌曲等等,因而,云存儲(chǔ)通常對(duì)其存儲(chǔ)的數(shù)據(jù)采取一些去重處理,以減小云存儲(chǔ)中的數(shù)據(jù)量,從而節(jié)省云存儲(chǔ)的存儲(chǔ)和管理開銷。
由于每個(gè)用戶都會(huì)向云存儲(chǔ)中上傳數(shù)據(jù),現(xiàn)有技術(shù)中,云存儲(chǔ)通??擅扛粢欢螘r(shí)間整理一次其存儲(chǔ)的數(shù)據(jù),對(duì)重復(fù)的數(shù)據(jù)只保留一份,從而降低存儲(chǔ)的數(shù)據(jù)量,以節(jié)省數(shù)據(jù)存儲(chǔ)和管理的開銷。然而,一方面,這種方法對(duì)于云存儲(chǔ)來說,對(duì)數(shù)據(jù)進(jìn)行去重之前,需要存儲(chǔ)重復(fù)的文件,浪費(fèi)了存儲(chǔ)空間,而且,進(jìn)行定時(shí)的掃描和去重處理,也需要消耗較大的計(jì)算能力,因此,數(shù)據(jù)去重的效率比較低;另一方面,對(duì)于用戶來說,用戶每次上傳文件時(shí)都需要上傳整個(gè)文件,對(duì)于云存儲(chǔ)中已存在的大文件來說,這樣的上傳方式,浪費(fèi)了用戶的上傳帶寬和上傳時(shí)間。
綜上所述,目前亟需要一種云端存儲(chǔ)數(shù)據(jù)的方法,用以解決現(xiàn)有技術(shù)中的數(shù)據(jù)去重的效率較低、計(jì)算量較大,浪費(fèi)用戶的上傳帶寬和上傳時(shí)間的技術(shù)問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種云端存儲(chǔ)數(shù)據(jù)的方法,用以解決現(xiàn)有技術(shù)中的數(shù)據(jù)去重的效率較低、計(jì)算量較大,浪費(fèi)用戶的上傳帶寬和上傳時(shí)間的技術(shù)問題。
本發(fā)明實(shí)施例提供的一種云端存儲(chǔ)數(shù)據(jù)的方法,所述方法包括:
第一服務(wù)器接收客戶端發(fā)送的用于上傳第一文件的文件上傳請(qǐng)求;所述文件上傳請(qǐng)求是所述客戶端接收到用戶的文件上傳指令后發(fā)送的,所述文件上傳請(qǐng)求中包括所述客戶端根據(jù)所述第一文件計(jì)算得到的第一數(shù)字指紋;
所述第一服務(wù)器根據(jù)所述第一數(shù)字指紋,計(jì)算得到所述第一文件的第二數(shù)字指紋,并根據(jù)所述第一文件的第二數(shù)字指紋,查詢區(qū)塊鏈數(shù)據(jù)庫;
所述第一服務(wù)器若確定所述區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有所述第一文件的第二數(shù)字指紋,則記錄所述用戶對(duì)所述第一文件的所有權(quán),并向所述客戶端發(fā)送第一指示信息;所述第一指示信息用于指示所述客戶端不再上傳所述第一文件;所述區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有多個(gè)服務(wù)器中所存儲(chǔ)的文件的第二數(shù)字指紋,所述第一服務(wù)器為所述多個(gè)服務(wù)器中的任一服務(wù)器。
可選地,所述方法還包括:
所述第一服務(wù)器若確定所述區(qū)塊鏈數(shù)據(jù)庫中未存儲(chǔ)有所述第一文件的第二數(shù)字指紋,則向所述客戶端發(fā)送第二指示信息,并將所述第一文件的第二數(shù)字指紋寫入所述區(qū)塊鏈數(shù)據(jù)庫;第二指示信息用于指示所述客戶端上傳所述第一文件。
可選地,所述文件上傳請(qǐng)求中還包括對(duì)所述第一文件的加密處理指示;
所述第一服務(wù)器確定所述區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有所述第一文件的第二數(shù)字指紋之后,還包括:
所述第一服務(wù)器記錄所述用戶對(duì)第一加密文件的所有權(quán),并向所述客戶端發(fā)送第一指示信息;所述第一加密文件為所述客戶端根據(jù)所述加密處理指示對(duì)所述第一文件進(jìn)行加密得到的,所述第一指示信息用于指示所述客戶端不再上傳所述第一加密文件。
可選地,所述方法還包括:
所述第一服務(wù)器接收所述客戶端發(fā)送的用于下載第二文件的文件下載請(qǐng)求;所述文件下載請(qǐng)求中包括所述第二文件的第一數(shù)字指紋;
所述第一服務(wù)器根據(jù)所述第二文件的第一數(shù)字指紋,計(jì)算所述第二文件的第二數(shù)字指紋,并根據(jù)所述第二文件的第二數(shù)字指紋,以及文件的第二數(shù)字指紋和服務(wù)器的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,若確定與所述第二文件的第二數(shù)字指紋對(duì)應(yīng)的服務(wù)器的標(biāo)識(shí)為所述第一服務(wù)器的標(biāo)識(shí),則將自身存儲(chǔ)的所述第二文件發(fā)送給所述客戶端;若確定與所述第二文件的第二數(shù)字指紋對(duì)應(yīng)的服務(wù)器的標(biāo)識(shí)為第二服務(wù)器的標(biāo)識(shí),則指示所述第二服務(wù)器將所述第二文件發(fā)送給所述客戶端,所述第二服務(wù)器為所述多個(gè)服務(wù)器中的另一服務(wù)器。
可選地,所述第一服務(wù)器指示所述第二服務(wù)器將所述第二文件發(fā)送給所述客戶端,包括:
所述第一服務(wù)器根據(jù)私鑰計(jì)算對(duì)隨機(jī)信息的第一數(shù)字簽名;
所述第一服務(wù)器向所述第二服務(wù)器發(fā)送重定向請(qǐng)求,所述重定向請(qǐng)求中包括所述第一數(shù)字簽名、所述隨機(jī)信息和公鑰;所述重定向請(qǐng)求用于所述第二服務(wù)器根據(jù)所述第一數(shù)字簽名、所述隨機(jī)信息和公鑰驗(yàn)證所述第一數(shù)字簽名合法后,將所述第二文件發(fā)送給所述客戶端。
本發(fā)明實(shí)施例還提供另一種云端存儲(chǔ)數(shù)據(jù)的方法,所述方法包括:
客戶端接收用戶的文件上傳指令,并根據(jù)所述文件上傳指令,確定出待上傳的第一文件;
所述客戶端根據(jù)所述第一文件,計(jì)算得到第一數(shù)字指紋;
所述客戶端根據(jù)所述第一數(shù)字指紋,向服務(wù)器發(fā)送文件上傳請(qǐng)求;所述文件上傳請(qǐng)求中包括所述第一數(shù)字指紋;
所述客戶端接收所述服務(wù)器發(fā)送的指示信息,若確定所述指示信息為第一指示信息,則不上傳所述第一文件;若確定所述指示信息為第二指示信息,則上傳所述第一文件。
可選地,所述文件上傳指令中還包括對(duì)所述第一文件的加密處理指示;
所述客戶端根據(jù)待上傳的所述第一文件,計(jì)算得到第一數(shù)字指紋,包括:
所述客戶端根據(jù)所述加密處理指示,計(jì)算所述第一文件的數(shù)字指紋;
所述客戶端根據(jù)所述第一文件的數(shù)字指紋,對(duì)所述第一文件進(jìn)行加密,得到第一加密文件;
所述客戶端計(jì)算所述第一加密文件的數(shù)字指紋,得到所述第一數(shù)字指紋。
可選地,所述方法還包括:
所述客戶端接收用戶的文件下載指令,并根據(jù)所述文件下載指令,確定出待下載的第二文件;
所述客戶端根據(jù)所述客戶端中文件與文件的第一數(shù)字指紋的對(duì)應(yīng)關(guān)系,確定出所述第二文件的第一數(shù)字指紋;
所述客戶端根據(jù)所述第二文件的第一數(shù)字指紋,向所述服務(wù)器發(fā)送文件下載請(qǐng)求。
基于同樣的發(fā)明構(gòu)思,本發(fā)明提供的一種服務(wù)器,所述服務(wù)器包括:
收發(fā)模塊,所述收發(fā)模塊用于接收客戶端發(fā)送的用于上傳第一文件的文件上傳請(qǐng)求;所述文件上傳請(qǐng)求是所述客戶端接收到用戶的文件上傳指令后發(fā)送的,所述文件上傳請(qǐng)求中包括所述客戶端根據(jù)所述第一文件計(jì)算得到的第一數(shù)字指紋;
查詢模塊,所述查詢模塊用于根據(jù)所述第一數(shù)字指紋,計(jì)算得到所述第一文件的第二數(shù)字指紋,并根據(jù)所述第一文件的第二數(shù)字指紋,查詢區(qū)塊鏈數(shù)據(jù)庫;
處理模塊,所述處理模塊用于若確定所述區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有所述第一文件的第二數(shù)字指紋,則記錄所述用戶對(duì)所述第一文件的所有權(quán),并通過所述收發(fā)模塊向所述客戶端發(fā)送第一指示信息;所述第一指示信息用于指示所述客戶端不再上傳所述第一文件;所述區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有多個(gè)服務(wù)器中所存儲(chǔ)的文件的第二數(shù)字指紋,所述第一服務(wù)器為所述多個(gè)服務(wù)器中的任一服務(wù)器。
可選地,所述處理模塊還用于:
若確定所述區(qū)塊鏈數(shù)據(jù)庫中未存儲(chǔ)有所述第一文件的第二數(shù)字指紋,則通過所述收發(fā)模塊向所述客戶端發(fā)送第二指示信息,并將所述第一文件的第二數(shù)字指紋寫入所述區(qū)塊鏈數(shù)據(jù)庫;第二指示信息用于指示所述客戶端上傳所述第一文件。
可選地,所述文件上傳請(qǐng)求中還包括對(duì)所述第一文件的加密處理指示;
所述處理模塊還用于:
記錄所述用戶對(duì)第一加密文件的所有權(quán),并向所述客戶端發(fā)送第一指示信息;所述第一加密文件為所述客戶端根據(jù)所述加密處理指示對(duì)所述第一文件進(jìn)行加密得到的,所述第一指示信息用于指示所述客戶端不再上傳所述第一加密文件。
可選地,所述收發(fā)模塊還用于:
接收所述客戶端發(fā)送的用于下載第二文件的文件下載請(qǐng)求;所述文件下載請(qǐng)求中包括所述第二文件的第一數(shù)字指紋;
所述處理模塊還用于:
根據(jù)所述第二文件的第一數(shù)字指紋,計(jì)算所述第二文件的第二數(shù)字指紋,并根據(jù)所述第二文件的第二數(shù)字指紋,以及文件的第二數(shù)字指紋和服務(wù)器的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,若確定與所述第二文件的第二數(shù)字指紋對(duì)應(yīng)的服務(wù)器的標(biāo)識(shí)為所述第一服務(wù)器的標(biāo)識(shí),則通過所述收發(fā)模塊將自身存儲(chǔ)的所述第二文件并發(fā)送給所述客戶端;若確定與所述第二文件的第二數(shù)字指紋對(duì)應(yīng)的服務(wù)器的標(biāo)識(shí)為第二服務(wù)器的標(biāo)識(shí),則通過所述收發(fā)模塊指示所述第二服務(wù)器將所述第二文件發(fā)送給所述客戶端,所述第二服務(wù)器為所述多個(gè)服務(wù)器中的另一服務(wù)器。
可選地,所述處理模塊還用于:
根據(jù)私鑰計(jì)算對(duì)隨機(jī)信息的第一數(shù)字簽名;
所述收發(fā)模塊還用于:
向所述第二服務(wù)器發(fā)送重定向請(qǐng)求,所述重定向請(qǐng)求中包括所述第一數(shù)字簽名、所述隨機(jī)信息和公鑰;所述重定向請(qǐng)求用于所述第二服務(wù)器根據(jù)所述第一數(shù)字簽名、隨機(jī)數(shù)和公鑰驗(yàn)證所述第一數(shù)字簽名合法后,將所述第二文件發(fā)送給所述客戶端。
本發(fā)明提供的一種客戶端,所述客戶端包括:
收發(fā)模塊,所述收發(fā)模塊用于接收用戶的文件上傳指令;
處理模塊,所述處理模塊用于根據(jù)所述文件上傳指令,確定出待上傳的第一文件;以及,根據(jù)所述第一文件,計(jì)算得到第一數(shù)字指紋;
所述收發(fā)模塊還用于根據(jù)所述第一數(shù)字指紋,向服務(wù)器發(fā)送文件上傳請(qǐng)求;所述文件上傳請(qǐng)求中包括所述第一數(shù)字指紋;以及,接收所述服務(wù)器發(fā)送的指示信息;
所述處理模塊還用于,若確定所述指示信息為第一指示信息,則確定不上傳所述第一文件;若確定所述指示信息為第二指示信息,則通過所述收發(fā)模塊上傳所述第一文件。
可選地,所述文件上傳指令中還包括對(duì)所述第一文件的加密處理指示;
所述處理模塊還用于:
根據(jù)所述加密處理指示,計(jì)算所述第一文件的數(shù)字指紋;
根據(jù)所述第一文件的數(shù)字指紋,對(duì)所述第一文件進(jìn)行加密,得到第一加密文件;
計(jì)算所述第一加密文件的數(shù)字指紋,得到所述第一數(shù)字指紋。
可選地,所述收發(fā)模塊還用于:
接收用戶的文件下載指令;
所述處理模塊還用于:
根據(jù)所述文件下載指令,確定待下載的第二文件;
根據(jù)所述客戶端中文件與文件的第一數(shù)字指紋的對(duì)應(yīng)關(guān)系,確定出所述第二文件的第一數(shù)字指紋;
所述收發(fā)模塊還用于:
根據(jù)所述第二文件的第一數(shù)字指紋,向所述服務(wù)器發(fā)送文件下載請(qǐng)求。本發(fā)明實(shí)施例中,第一服務(wù)器接收客戶端發(fā)送的文件上傳請(qǐng)求,根據(jù)所述文件上傳請(qǐng)求中的第一數(shù)字指紋,計(jì)算第一文件的第二數(shù)字指紋,并根據(jù)該第二數(shù)字指紋,查詢區(qū)塊鏈數(shù)據(jù)庫,若確定區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有第一文件的第二數(shù)字指紋,則直接記錄用戶對(duì)第一文件的所有權(quán),向客戶端發(fā)送第一指示信息,以指示客戶端不再上傳第一文件。由于所述區(qū)塊鏈數(shù)據(jù)庫中可存儲(chǔ)有多個(gè)服務(wù)器中所存儲(chǔ)的文件的第二數(shù)字指紋,因而,通過查詢?cè)搮^(qū)塊鏈數(shù)據(jù)庫,第一服務(wù)器可確定多個(gè)服務(wù)器中是否有服務(wù)器存儲(chǔ)有該第一文件,若存有該第一文件,則無需用戶再次上傳該第一文件,從而,可實(shí)現(xiàn)了多個(gè)服務(wù)器中不會(huì)存儲(chǔ)重復(fù)的文件,有效避免了現(xiàn)有技術(shù)中對(duì)云存儲(chǔ)的服務(wù)器中存儲(chǔ)的數(shù)據(jù)進(jìn)行去重處理所引起的計(jì)算量很大的問題,同時(shí),也節(jié)省了用戶的上傳帶寬和上傳時(shí)間。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例中云存儲(chǔ)聯(lián)盟的系統(tǒng)架構(gòu)圖;
圖2為本發(fā)明實(shí)施例中第一云存儲(chǔ)的系統(tǒng)架構(gòu)的示意圖;
圖3為本發(fā)明實(shí)施例提供的一種云端存儲(chǔ)數(shù)據(jù)的方法中的文件上傳過程所對(duì)應(yīng)的流程示意圖;
圖4為本發(fā)明實(shí)施例提供的一種云端存儲(chǔ)數(shù)據(jù)的方法中的文件下載過程所對(duì)應(yīng)的流程示意圖;
圖5為本發(fā)明實(shí)施例中的一種云存儲(chǔ)的服務(wù)器的結(jié)構(gòu)示意圖;
圖6為本發(fā)明實(shí)施例中的一種云存儲(chǔ)的客戶端的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述,顯然,所描述的實(shí)施例,僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
下面結(jié)合說明書附圖對(duì)本發(fā)明實(shí)施例做進(jìn)一步詳細(xì)描述。
本發(fā)明實(shí)施例中的云端存儲(chǔ)數(shù)據(jù)的方法,具體適用于云存儲(chǔ)聯(lián)盟。圖1為本發(fā)明實(shí)施例中云存儲(chǔ)聯(lián)盟的系統(tǒng)架構(gòu)圖,如圖1所示,該云存儲(chǔ)聯(lián)盟100中包括多個(gè)云存儲(chǔ)(如圖1中的第一云存儲(chǔ)1011、第二云存儲(chǔ)1012…第n云存儲(chǔ)101n),所述多個(gè)云存儲(chǔ)共同維護(hù)的一個(gè)區(qū)塊鏈數(shù)據(jù)庫102,以及所述多個(gè)云存儲(chǔ)中的每個(gè)云存儲(chǔ)各自的用戶(如圖1中的1031、1032…103n)。
其中,該云存儲(chǔ)聯(lián)盟中任一云存儲(chǔ)均可向其用戶提供文件的上傳和下載的服務(wù),而且,該云存儲(chǔ)聯(lián)盟中的各個(gè)云存儲(chǔ)可以為相同的或者不同的云存儲(chǔ)廠商開發(fā)的云存儲(chǔ)產(chǎn)品,任一云存儲(chǔ)也可向其他云存儲(chǔ)提供存儲(chǔ)托管服務(wù),本發(fā)明對(duì)此不做具體限制。
本發(fā)明實(shí)施例中,所述區(qū)塊鏈數(shù)據(jù)庫又名blockchain,云存儲(chǔ)聯(lián)盟中的任一云存儲(chǔ)均可向該區(qū)塊鏈數(shù)據(jù)庫中寫入數(shù)據(jù),具體的,該區(qū)塊鏈數(shù)據(jù)庫用于存儲(chǔ)云存儲(chǔ)聯(lián)盟中各個(gè)云存儲(chǔ)中所存有的文件的第二數(shù)字指紋,以及真正持有每個(gè)文件的云存儲(chǔ)的身份標(biāo)識(shí)、云存儲(chǔ)對(duì)文件的數(shù)字簽名等信息。
需要說明的是,本發(fā)明實(shí)施例中區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)的文件的第二數(shù)字指紋,具體是指云存儲(chǔ)根據(jù)文件的第一數(shù)字指紋計(jì)算得到的文件的第二數(shù)字指紋,由于某一文件的數(shù)字指紋具有唯一性,因此,文件的數(shù)字指紋以及文件的第二數(shù)字指紋均可作為文件的標(biāo)識(shí)。
由于存儲(chǔ)在區(qū)塊鏈數(shù)據(jù)庫中的數(shù)據(jù)可以快速同步且不可篡改,因此,使用區(qū)塊鏈數(shù)據(jù)庫不僅可以實(shí)現(xiàn)將云存儲(chǔ)聯(lián)盟中的各個(gè)云存儲(chǔ)共享存儲(chǔ)資源,節(jié)省云存儲(chǔ)的存儲(chǔ)和管理開銷,而且還能保證用戶在云存儲(chǔ)聯(lián)盟所存儲(chǔ)的文件的安全性。
具體的,云存儲(chǔ)聯(lián)盟中的每個(gè)云存儲(chǔ)均使用客戶端-服務(wù)器(client-server)的系統(tǒng)架構(gòu)。以云存儲(chǔ)聯(lián)盟中的任一云存儲(chǔ),即第一云存儲(chǔ)為例,圖2為本發(fā)明實(shí)施例中第一云存儲(chǔ)的系統(tǒng)架構(gòu),如圖2所示,所述第一云存儲(chǔ)包括服務(wù)器201和客戶端202,所述服務(wù)器中存儲(chǔ)有用戶上傳的文件,此外,用戶203可向客戶端202發(fā)送文件上傳指令或文件下載指令的方式,向服務(wù)器201中上傳文件或者下載在該第一云存儲(chǔ)中已上傳的文件。
基于上面所描述的系統(tǒng)架構(gòu),下面將以第一云存儲(chǔ)為例,介紹本發(fā)明實(shí)施例中的云端存儲(chǔ)數(shù)據(jù)的方法。圖3為本發(fā)明實(shí)施例提供的一種云端存儲(chǔ)數(shù)據(jù)的方法中的文件上傳過程所對(duì)應(yīng)的流程示意圖,如圖3所示,所述文件上傳過程包括以下步驟s301至步驟s305:
步驟s301:客戶端接收用戶的文件上傳指令,并根據(jù)所述文件上傳指令,確定出待上傳的第一文件;
步驟s302:所述客戶端根據(jù)所述第一文件,計(jì)算得到第一數(shù)字指紋;
步驟s303:所述客戶端根據(jù)所述第一數(shù)字指紋,向服務(wù)器發(fā)送文件上傳請(qǐng)求;所述文件上傳請(qǐng)求中包括所述第一數(shù)字指紋;
步驟s304:第一服務(wù)器接收客戶端發(fā)送的用于上傳第一文件的文件上傳請(qǐng)求;
步驟s305:所述第一服務(wù)器根據(jù)所述第一數(shù)字指紋,計(jì)算得到所述第一文件的第二數(shù)字指紋,并根據(jù)所述第一文件的第二數(shù)字指紋,查詢區(qū)塊鏈數(shù)據(jù)庫;
步驟s306:所述第一服務(wù)器若確定所述區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有所述第一文件的第二數(shù)字指紋,則記錄所述用戶對(duì)所述第一文件的所有權(quán),并向所述客戶端發(fā)送第一指示信息;
步驟s307:所述服務(wù)器若確定所述區(qū)塊鏈數(shù)據(jù)庫中未存儲(chǔ)有所述第一文件的第二數(shù)字指紋,則向所述客戶端發(fā)送第二指示信息,并將所述第一文件的第二數(shù)字指紋寫入所述區(qū)塊鏈數(shù)據(jù)庫;
步驟s308:所述客戶端接收所述服務(wù)器發(fā)送的指示信息,若確定所述指示信息為第一指示信息,則不上傳所述第一文件;若確定所述指示信息為第二指示信息,則上傳所述第一文件。
需要說明的是,在上述步驟s301至步驟s308中,客戶端具體是第一云存儲(chǔ)的客戶端,第一服務(wù)器指第一云存儲(chǔ)的服務(wù)器,相應(yīng)地,用戶具體是所述第一云存儲(chǔ)的用戶。
由于所述區(qū)塊鏈數(shù)據(jù)庫是由云存儲(chǔ)聯(lián)盟中的多個(gè)云存儲(chǔ)共同維護(hù)的,因而,該區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有多個(gè)云存儲(chǔ)中所存儲(chǔ)的文件的第二數(shù)字指紋,因而,通過查詢?cè)搮^(qū)塊鏈數(shù)據(jù)庫,第一服務(wù)器可確定云存儲(chǔ)聯(lián)盟中是否云存儲(chǔ)的服務(wù)器中存儲(chǔ)有該第一文件,若存有該第一文件,則無需用戶再次上傳該第一文件,從而,可實(shí)現(xiàn)了多個(gè)云存儲(chǔ)中不會(huì)存儲(chǔ)重復(fù)的文件,有效避免了現(xiàn)有技術(shù)中對(duì)云存儲(chǔ)的服務(wù)器中存儲(chǔ)的數(shù)據(jù)進(jìn)行去重處理所引起的計(jì)算量很大的問題,同時(shí),也節(jié)省了用戶的上傳帶寬和上傳時(shí)間。
具體的,在步驟s301中,客戶端接收用戶的用于上傳第一文件的文件上傳指令。比如說,在具體的應(yīng)用場(chǎng)景中,用戶可在客戶端的圖形交互界面中點(diǎn)擊上傳按鈕,并在本地磁盤中選擇待上傳的第一文件,并點(diǎn)擊上傳按鈕后觸發(fā)的。
在步驟s302和步驟s303中,客戶端根據(jù)用戶選定的待上傳的第一文件,經(jīng)過分析和計(jì)算,得到第一數(shù)字指紋,并根據(jù)該第一數(shù)字指紋,向第一服務(wù)器發(fā)送文件上傳請(qǐng)求。其中,該第一數(shù)字指紋可以是客戶端通過計(jì)算該第一文件的文件哈希值得到的,或者也可以通過crc(cyclicalredundancycheck,循環(huán)冗余校驗(yàn))、sha256(securehashalgorithm,安全散列算法)等其他計(jì)算方式得到的,此處不做具體限制。
本發(fā)明實(shí)施例中,某一文件的數(shù)字指紋具有唯一性,以數(shù)字指紋為文件哈希值為例,不同的文件計(jì)算得出的文件哈希值是不同的,因此,數(shù)字指紋可以唯一地標(biāo)識(shí)每個(gè)文件。
在步驟s304,第一服務(wù)器接收客戶端發(fā)送的用于上傳第一文件的文件上傳請(qǐng)求,并根據(jù)該文件上傳請(qǐng)求中的第一數(shù)字指紋,進(jìn)行進(jìn)一步地計(jì)算處理,得到第一文件的第二數(shù)字指紋。
具體的,所述第一服務(wù)器可通過計(jì)算該第一數(shù)字指紋的數(shù)字指紋,得到該第一文件的第二數(shù)字指紋,(比如說,第二數(shù)字指紋可以為第一文件的數(shù)字指紋的哈希值),或者,也可以通過其他方式計(jì)算得到第一文件的第二數(shù)字指紋,此處不做具體限制。
需要說明的是,由于文件的數(shù)字指紋具有唯一性,因此,通過對(duì)第一數(shù)字指紋再次計(jì)算數(shù)字指紋,而得到的第一文件的第二數(shù)字指紋也具有唯一性,可作為文件的標(biāo)識(shí)唯一地標(biāo)識(shí)云存儲(chǔ)中的每個(gè)文件。
在步驟s305中,第一服務(wù)器訪問區(qū)塊鏈數(shù)據(jù)庫,以檢測(cè)該區(qū)塊鏈數(shù)據(jù)庫中是否存儲(chǔ)有該第一文件的第二數(shù)字指紋。其中,該區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)中多個(gè)服務(wù)器中所存儲(chǔ)文件的第二數(shù)字指紋,在本發(fā)明實(shí)施例中,區(qū)塊鏈數(shù)據(jù)庫中實(shí)際存儲(chǔ)有云存儲(chǔ)聯(lián)盟中的所有云存儲(chǔ)中存儲(chǔ)的文件的第二數(shù)字指紋。
在步驟s306中,若檢測(cè)到區(qū)塊鏈數(shù)據(jù)庫中已存儲(chǔ)有該第一文件的第二數(shù)字指紋,則說明云存儲(chǔ)聯(lián)盟的多個(gè)云存儲(chǔ)中存在某一云存儲(chǔ)的服務(wù)器中存儲(chǔ)有該第一文件,具體的,可能是第一服務(wù)器存儲(chǔ)有該第一文件,也可能是第一云存儲(chǔ)以外的另一云存儲(chǔ)(如第二云存儲(chǔ))的服務(wù)器中存儲(chǔ)有該第一文件。由于該云存儲(chǔ)聯(lián)盟中已通過區(qū)塊鏈數(shù)據(jù)庫實(shí)現(xiàn)了存儲(chǔ)資源的共享,因此,無論具體是哪個(gè)云存儲(chǔ)的服務(wù)器實(shí)際存儲(chǔ)有該第一文件,都無需用戶再次上傳該第一文件,第一服務(wù)器只需記錄該用戶對(duì)第一文件的所有權(quán),并向客戶端發(fā)送第一指示信息,以指示客戶端不用再上傳該第一文件。
舉例來說,若用戶通過客戶端向第一服務(wù)器上傳文件w,則客戶端首先向第一服務(wù)器發(fā)送該文件w的第一數(shù)字指紋,即文件w的哈希值hash=h(w),由于區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)的是文件的二次哈希值doublehash=h(h(w)),因此,第一服務(wù)器在接收到文件w的第一數(shù)字指紋hash=h(w),會(huì)首先根據(jù)該第一數(shù)字指紋,計(jì)算文件w的第二數(shù)字指紋,即文件w的二次哈希值doublehash=h(h(w)),若計(jì)算得到的二次哈希值doublehash與區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)的二次哈希值相同,則認(rèn)為云存儲(chǔ)聯(lián)盟中已存儲(chǔ)有相同的文件,無需用戶再次上傳。
實(shí)際上,某些廣受歡迎的文件(比如說電影、音樂等等)可能是很多用戶共有的,在現(xiàn)有技術(shù)中,這類文件在多個(gè)云存儲(chǔ)上重復(fù)的概率極高。因此,本發(fā)明實(shí)施例中,當(dāng)云存儲(chǔ)聯(lián)盟中的任一云存儲(chǔ)存儲(chǔ)有某一文件的情況下,無需用戶再次上傳完整的該文件,只需記錄下用戶對(duì)該文件的所有權(quán),因此,可以有效節(jié)省了用戶的上傳時(shí)間和帶寬開銷。
在具體的應(yīng)用場(chǎng)景中,第一服務(wù)器可在本地的數(shù)據(jù)記錄中記錄其用戶存儲(chǔ)的各個(gè)文件的文件信息。其中,某一文件的文件信息可以為用戶向第一云存儲(chǔ)中上傳該文件后,獲得并記錄在第一服務(wù)器的數(shù)據(jù)記錄中的。
本發(fā)明實(shí)施例中,所述服務(wù)器中的數(shù)據(jù)記錄可以是以數(shù)據(jù)庫的方式記載的,比如說,各種關(guān)系型數(shù)據(jù)庫(如mysql)或者非關(guān)系型數(shù)據(jù)庫(如nosql),或者也可以是采用文件等其他方式記載,此處不做具體限制。
具體的,表1為本發(fā)明實(shí)施例中第一服務(wù)器中的數(shù)據(jù)記錄中記載的文件信息的示例,如表1所示,對(duì)于任一文件來說,這些文件信息包括文件標(biāo)識(shí)、持有該文件的云存儲(chǔ)的身份標(biāo)識(shí)、擁有該文件的所有權(quán)的用戶列表。其中,文件標(biāo)識(shí)可以為文件的數(shù)字指紋或根據(jù)文件的數(shù)字指紋計(jì)算得到的文件的第二數(shù)字指紋,擁有該文件的云存儲(chǔ)可以是云存儲(chǔ)聯(lián)盟中的任一云存儲(chǔ)的身份標(biāo)識(shí),擁有該文件的所有權(quán)的用戶列表中包括用戶該文件的所有權(quán)的各個(gè)用戶的標(biāo)識(shí),該用戶的標(biāo)識(shí)具體可以是用戶的id,且,擁有該文件的所有權(quán)的用戶可以為一個(gè)或多個(gè)。
表1第一云存儲(chǔ)的服務(wù)器中數(shù)據(jù)記錄中記載的文件信息的示例
這種情況下,第一服務(wù)器檢測(cè)到區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有該第一文件的第二數(shù)字指紋,則記錄該用戶對(duì)該第一文件的所有權(quán),具體的,可在該文件的第二數(shù)字指紋對(duì)應(yīng)的用戶列表中添加該用戶的標(biāo)識(shí)。
在步驟s307中,若檢測(cè)到區(qū)塊鏈數(shù)據(jù)庫中未存儲(chǔ)有該第一文件的第二數(shù)字指紋,則說明云存儲(chǔ)聯(lián)盟中的多個(gè)云存儲(chǔ)中均未存儲(chǔ)該第一文件,因此,需要用戶上傳該第一文件,即第一服務(wù)器向客戶端發(fā)送第二指示信息,以指示客戶端上傳第一文件,并在客戶端成功上傳該第一文件后,將第一文件的第二數(shù)字指紋、第一云存儲(chǔ)的身份標(biāo)識(shí)寫入到區(qū)塊鏈數(shù)據(jù)庫中。與此同時(shí),第一服務(wù)器還將成功上傳的第一文件的數(shù)字指紋或根據(jù)第一文件的數(shù)字指紋計(jì)算得到的第一文件的第二數(shù)字指紋、第一服務(wù)器的身份標(biāo)識(shí),以及該用戶對(duì)第一文件的所有權(quán)(即在該文件的用戶列表中添加該用戶)記錄在上述格式的第一服務(wù)器的數(shù)據(jù)記錄中,以便于另一用戶請(qǐng)求下在該第一文件時(shí),第一服務(wù)器可進(jìn)行相應(yīng)地查詢。
在這種情況下,第一云存儲(chǔ)即為真正持有該第一文件的云存儲(chǔ),第一云存儲(chǔ)對(duì)第一文件第二數(shù)字指紋的數(shù)字簽名,用于向該區(qū)塊鏈數(shù)據(jù)庫表示該第一云存儲(chǔ)寫入的數(shù)據(jù)是真實(shí)可靠的。
在文件上傳的過程中,客戶端向服務(wù)器發(fā)送的第一數(shù)字指紋一般都是該客戶端通過分析用戶選定的第一文件,計(jì)算(如計(jì)算該第一文件的哈希值)得到的,也就是說,當(dāng)用戶通過客戶端上傳文件時(shí),用戶是真實(shí)持有待上傳的第一文件的。但在某些極端情況下,如果用戶文件的數(shù)字指紋泄露,非法用戶在不持有文件的情況下,也可獲得文件的所有權(quán)。舉例來說,如果用戶a的云存儲(chǔ)中存儲(chǔ)有文件a,但是文件a的數(shù)字指紋被泄露到了互聯(lián)網(wǎng)上,用戶b通過互聯(lián)網(wǎng)取得文件a的數(shù)字指紋后,可通過軟件模擬客戶端計(jì)算數(shù)字指紋的過程,并將該數(shù)字指紋發(fā)送給服務(wù)器。進(jìn)而,服務(wù)器通過該數(shù)字指紋計(jì)算文件a的第二數(shù)字指紋,并查詢區(qū)塊鏈數(shù)據(jù)庫。由于云存儲(chǔ)中已存儲(chǔ)有該文件a,因此,服務(wù)器在確定區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有文件a的第二數(shù)字指紋后,會(huì)直接記錄用戶b對(duì)文件a的所有權(quán),從而使得用戶b采用不正當(dāng)途徑取得了用戶a的文件a。
因此,為了加強(qiáng)云存儲(chǔ)中所存儲(chǔ)的文件的安全性,第一服務(wù)器還可對(duì)用戶上傳的第一文件進(jìn)行加密處理。具體的,用戶在通過客戶端上傳第一文件時(shí),還可具體指定對(duì)該第一文件的處理方式,即是否對(duì)第一文件進(jìn)行加密處理。
在步驟s301中,客戶端接收到的用戶發(fā)送的文件上傳指令中除了選定的待上傳的第一文件外,還包括對(duì)第一文件的加密處理指示。
若文件上傳指令中不包括該加密處理指示,則說明用戶確定不對(duì)第一文件進(jìn)行加密處理,這種情況下,用戶待上傳的文件就是第一文件本身,因而,所述客戶端可直接計(jì)算第一文件的數(shù)字指紋(如第一文件的文件哈希值),并將其作為第一數(shù)字指紋在文件上傳請(qǐng)求中發(fā)送給服務(wù)器,隨后,服務(wù)器可通過執(zhí)行上述步驟s305至步驟s308,進(jìn)行后續(xù)的處理,此處不再贅述。
若所述處理指示為加密處理指示,則說明用戶確定對(duì)第一文件進(jìn)行加密處理,該用戶待上傳的文件實(shí)際為加密后的第一文件,因而,客戶端在文件上傳請(qǐng)求中發(fā)送給服務(wù)器的第一數(shù)字指紋為對(duì)加密后的第一文件計(jì)算得到的數(shù)字指紋。
以文件的數(shù)字指紋作為文件的哈希值為例,該計(jì)算第一數(shù)字指紋的過程具體包括,客戶端計(jì)算第一文件的數(shù)字指紋,根據(jù)得到的第一文件的數(shù)字指紋對(duì)第一文件加密,得到第一加密文件,隨后,再次計(jì)算第一加密文件的數(shù)字指紋,并將得到的第一加密文件的數(shù)字指紋作為第一數(shù)字指紋,同上述加密處理指示一起,在文件上傳請(qǐng)求中發(fā)送給服務(wù)器。
由于用戶上傳的相同的文件,進(jìn)行加密處理后得到的加密文件也是相同的,所以,加密文件的數(shù)字指紋以及根據(jù)該數(shù)據(jù)指紋進(jìn)一步計(jì)算的第二數(shù)字指紋也是相同的。因而,如果區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有該第一加密文件的第二數(shù)字指紋,則說明云存儲(chǔ)聯(lián)盟中的多個(gè)云存儲(chǔ)中已存在一個(gè)云存儲(chǔ)的服務(wù)器存儲(chǔ)有相同的第一加密文件,則第一服務(wù)器可直接記錄用戶對(duì)第一加密文件的所有權(quán);否則,仍要通過客戶端上傳該第一加密文件。
可以看出,在用戶指示客戶端對(duì)待上傳的第一文件進(jìn)行加密處理的情況下,客戶端在文件上傳請(qǐng)求中發(fā)送給服務(wù)器的第一數(shù)字指紋,實(shí)際上是根據(jù)第一文件的數(shù)字指紋對(duì)第一文件進(jìn)行加密后,得到的第一加密文件的數(shù)字指紋。也就是說,用戶只有在真正持有第一文件的情況下,才可得到第一加密文件的數(shù)字指紋,取得第一文件的所有權(quán);而非法用戶在僅僅獲得第一文件的數(shù)字指紋,而未持有第一文件的情況下,不可能得到加密后的第一加密文件,所以也不能得到第一加密文件的第一數(shù)字指紋,從而取得的第一文件的所有權(quán),而且由于用戶加密后的文件的數(shù)字指紋泄露的可能性微乎其微,因而,通過對(duì)待上傳的第一文件進(jìn)行加密處理,可有效保證了云存儲(chǔ)中存儲(chǔ)的文件的安全。
除此之外,在現(xiàn)有技術(shù)中,如果云存儲(chǔ)遺失或者擅自修改了用戶上傳的文件,用戶也無法及時(shí)發(fā)現(xiàn)和證明,這使得用戶上傳到云存儲(chǔ)的文件的完整性無法得到保證,為用戶的數(shù)據(jù)權(quán)益帶來了一定的隱憂。
本發(fā)明實(shí)施例中,通過區(qū)塊鏈數(shù)據(jù)庫實(shí)現(xiàn)了云存儲(chǔ)聯(lián)盟中各個(gè)云存儲(chǔ)的存儲(chǔ)資源共享,云存儲(chǔ)聯(lián)盟中的每個(gè)云存儲(chǔ)中存儲(chǔ)的文件的第二數(shù)字指紋都存儲(chǔ)在了區(qū)塊鏈數(shù)據(jù)庫中,由于區(qū)塊鏈數(shù)據(jù)庫自身可快速同步且不可篡改的特性,如果云存儲(chǔ)篡改了用戶上傳的文件,那么根據(jù)云存儲(chǔ)中的文件計(jì)算得到的該文件的第二數(shù)字指紋必定和區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)的該文件的第二數(shù)字指紋不同,用戶可通過申請(qǐng)查看區(qū)塊鏈數(shù)據(jù)庫,獲取該文件原始的第二數(shù)字指紋,就可證明云存儲(chǔ)服務(wù)商篡改用戶數(shù)據(jù)的行為,從而保證了用戶數(shù)據(jù)的完整性和一致性。
由于本發(fā)明實(shí)施例中所述的區(qū)塊鏈數(shù)據(jù)庫具體是指聯(lián)盟鏈,即只有加入該聯(lián)盟的結(jié)構(gòu)或個(gè)體才有權(quán)限在該區(qū)塊鏈數(shù)據(jù)庫中寫入或讀取數(shù)據(jù),因此,本發(fā)明實(shí)施例中,用戶可通過云存儲(chǔ)聯(lián)盟中其他云存儲(chǔ)訪問該區(qū)塊鏈數(shù)據(jù)庫,或者也可以通過專門授權(quán)的機(jī)構(gòu)訪問區(qū)塊鏈數(shù)據(jù)庫,此處不做具體限制。
需要說明的是,作為一種簡(jiǎn)便的做法,本發(fā)明實(shí)施例中,第一服務(wù)器在接收到客戶端發(fā)送的第一文件的第一數(shù)字指紋后,也可以不對(duì)第一數(shù)字指紋計(jì)算文件的第二數(shù)字指紋,相應(yīng)地,在這種情況下,第一服務(wù)器的本地?cái)?shù)據(jù)記錄中文件的標(biāo)識(shí)即為文件的第一數(shù)字指紋,區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)的各云存儲(chǔ)中所有文件的第一數(shù)字指紋,第一服務(wù)器直接根據(jù)文件的第一數(shù)字指紋查詢區(qū)塊鏈數(shù)據(jù)庫,判斷區(qū)塊鏈數(shù)據(jù)庫中是否存儲(chǔ)有相同的第一數(shù)字指紋,以確定是否有云存儲(chǔ)已存儲(chǔ)有該文件,
圖4為本發(fā)明實(shí)施例提供的一種云端存儲(chǔ)數(shù)據(jù)的方法中的文件下載過程所對(duì)應(yīng)的流程示意圖,如圖4所示,所述文件下載過程包括如下步驟s401至步驟s406:
步驟s401:所述客戶端接收用戶的文件下載指令,并根據(jù)所述文件下載指令,確定出待下載的第二文件;
步驟s402:所述客戶端根據(jù)所述客戶端中文件與文件的數(shù)字指紋的對(duì)應(yīng)關(guān)系,確定出所述第二文件的第一數(shù)字指紋;
步驟s403:所述客戶端根據(jù)所述第二文件的第一數(shù)字指紋,向所述服務(wù)器發(fā)送文件下載請(qǐng)求;
步驟s404:所述第一服務(wù)器接收所述客戶端發(fā)送的用于下載第二文件的文件下載請(qǐng)求,所述文件下載請(qǐng)求中包括所述第二文件的第一數(shù)字指紋;
步驟s405:所述第一服務(wù)器根據(jù)所述第二文件的數(shù)字指紋,計(jì)算所述第二文件的第二數(shù)字指紋,并根據(jù)所述第二文件的第二數(shù)字指紋,文件的第二數(shù)字指紋和服務(wù)器的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,若確定與所述第二文件的第二數(shù)字指紋對(duì)應(yīng)的服務(wù)器的標(biāo)識(shí)為所述第一服務(wù)器的標(biāo)識(shí),則將自身存儲(chǔ)的所述第二文件并發(fā)送給所述客戶端;
步驟s406:若確定與所述第二文件的第一數(shù)字指紋對(duì)應(yīng)的服務(wù)器的標(biāo)識(shí)為第二服務(wù)器的標(biāo)識(shí),則指示所述第二服務(wù)器將所述第二文件發(fā)送給所述客戶端,所述第二服務(wù)器為所述多個(gè)服務(wù)器中的另一服務(wù)器。
本發(fā)明實(shí)施例中,由于多個(gè)云存儲(chǔ)通過區(qū)塊鏈數(shù)據(jù)庫實(shí)現(xiàn)了存儲(chǔ)資源的共享,因此,用戶通過第一云存儲(chǔ)上傳的文件實(shí)際上有可能存儲(chǔ)在第一云存儲(chǔ)中,也有可能存儲(chǔ)在云存儲(chǔ)聯(lián)盟中除第一云存儲(chǔ)以外的第二云存儲(chǔ)中。當(dāng)用戶通過向第一云存儲(chǔ)下載文件時(shí),可通過區(qū)塊鏈數(shù)據(jù)庫快速地發(fā)現(xiàn)真正持有該文件的云存儲(chǔ),并通過真正持有該文件的云存儲(chǔ)將文件發(fā)送給客戶端,由于該過程對(duì)用戶來說是透明的,采用真正持有該文件的云存儲(chǔ)將文件發(fā)送給客戶端,可以保證文件下載過程中的用戶體驗(yàn)。
需要說明的是,在上述步驟s401至步驟s406中,所述多個(gè)服務(wù)器具體是指一個(gè)云存儲(chǔ)聯(lián)盟中多個(gè)云存儲(chǔ)的服務(wù)器,具體的,所述第一服務(wù)器具體指第一云存儲(chǔ)的服務(wù)器,所述第二服務(wù)器具體是指第二云存儲(chǔ)的服務(wù)器,所述用戶為所述第一云存儲(chǔ)的用戶。
所述客戶端和所述第一服務(wù)器可通過執(zhí)行上述s401至s406中的方法步驟為用戶提供文件下載的服務(wù),而且,只有用戶通過在第一云存儲(chǔ)中上傳文件,取得文件的所有權(quán)后,才可通過第一云存儲(chǔ)的服務(wù)器和客戶端下載該文件。
具體的,在步驟s401中,客戶端接收用戶的文件下載指令,并根據(jù)所述文件下載指令,確定出待下載的第二文件;其中,所述第二文件為所述第一云存儲(chǔ)中所述用戶擁有所有權(quán)的任一文件。在具體的應(yīng)用場(chǎng)景,所述用戶可在客戶端的用戶界面中選定要下載的第二文件,并點(diǎn)擊下載按鈕的方式向客戶端發(fā)送文件下載指令,或者也可以通過其他方式向客戶端發(fā)送文件下載指令,此處不做限制。
在步驟s402和步驟s403中,如果所述用戶向第一云存儲(chǔ)中上傳了文件,則所述用戶的客戶端的數(shù)據(jù)記錄存儲(chǔ)有該用戶向第一云存儲(chǔ)中上傳的各文件,以及各文件的第一數(shù)字指紋的對(duì)應(yīng)關(guān)系。
因此,該客戶端可通過查詢客戶端中的數(shù)據(jù)記錄,獲取待下載的第二文件的第一數(shù)字指紋,并根據(jù)該第二文件的第一數(shù)字指紋,向所述第一服務(wù)器發(fā)送文件下載請(qǐng)求。
在步驟s404中,第一服務(wù)器接收所述客戶端發(fā)送的用于下載第二文件的文件下載請(qǐng)求,所述文件下載請(qǐng)求中包括所述第二文件的第一數(shù)字指紋。
在步驟s405中,第一服務(wù)器根據(jù)第二文件的第一數(shù)字指紋,計(jì)算該第二文件的第二數(shù)字指紋,比如說,可對(duì)該第二文件的第一數(shù)字指紋再次計(jì)算數(shù)字指紋,得到該第二文件的第二數(shù)字指紋;
進(jìn)而,根據(jù)該第二文件的第二數(shù)字指紋,以及文件的第二數(shù)字指紋和服務(wù)器的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,確定出與第二文件的數(shù)字指紋對(duì)應(yīng)的服務(wù)器的標(biāo)識(shí)。
若確定與所述第二文件的第二數(shù)字指紋對(duì)應(yīng)的服務(wù)器的標(biāo)識(shí)為所述第一服務(wù)器的標(biāo)識(shí),即第二文件存儲(chǔ)在第一云存儲(chǔ)中,則第一服務(wù)器將自身存儲(chǔ)的所述第二文件并發(fā)送給所述客戶端。
本發(fā)明實(shí)施例中,所述第二數(shù)字指紋和服務(wù)器的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系具體可以指所述服務(wù)器中存儲(chǔ)的數(shù)據(jù)記錄,如上文中的表1所示,該數(shù)據(jù)記錄中包括用戶向該第一云存儲(chǔ)上傳的各文件的文件信息,包括文件標(biāo)識(shí)、持有文件的云存儲(chǔ)的身份標(biāo)識(shí)、對(duì)文件擁有所有權(quán)的用戶列表,文件的第二數(shù)字指紋具體是指數(shù)據(jù)記錄中文件的標(biāo)識(shí),服務(wù)器的標(biāo)識(shí)具體是指真正存儲(chǔ)該文件的云存儲(chǔ)的身份標(biāo)識(shí)。
其中,某一文件的文件信息是用戶通過上述s301至s308中的方法步驟,在向第一云存儲(chǔ)中上傳該文件的過程中獲得并記錄在第一服務(wù)器中的,具體不再贅述。
因而,第一服務(wù)器可根據(jù)第二文件的第二數(shù)字指紋,查詢第一服務(wù)器的數(shù)據(jù)記錄,以確定出存儲(chǔ)該第二文件的云存儲(chǔ)的身份標(biāo)識(shí)。若確定存儲(chǔ)該第二文件的云存儲(chǔ)即為該第一云存儲(chǔ)自身,則第一云存儲(chǔ)可直接為用戶提供下載該第二文件的服務(wù),將該第二文件發(fā)送給客戶端。
反之,在步驟s406中,第一服務(wù)器若確定與所述第二文件的第二數(shù)字指紋對(duì)應(yīng)的服務(wù)器的標(biāo)識(shí)為第二服務(wù)器的標(biāo)識(shí),即第二文件存儲(chǔ)在第二云存儲(chǔ)中,則第一服務(wù)器指示所述第二服務(wù)器將所述第二文件發(fā)送給所述客戶端,所述第二服務(wù)器為所述多個(gè)服務(wù)器中的另一服務(wù)器,即云存儲(chǔ)聯(lián)盟中除第一云存儲(chǔ)以外的另一云存儲(chǔ)。
即,第一服務(wù)器若確定持有該第二文件的云存儲(chǔ)為云存儲(chǔ)聯(lián)盟中的第二云存儲(chǔ),則通過第二服務(wù)器為該用戶提供文件下載的服務(wù),將該第二文件發(fā)送給客戶端。
具體包括,第一云存儲(chǔ)通過如下方式計(jì)算輔助取回第二文件的服務(wù)證據(jù):
evidence=sign(priv,r)公式一
其中,evidence為輔助取回該第二文件的服務(wù)證據(jù),sign(priv,r)為數(shù)字簽名函數(shù),它有兩個(gè)參數(shù),分別是priv和r,具體的,priv是指第一云存儲(chǔ)的私鑰(即簽名者的私鑰),r是指隨機(jī)信息,即待簽名的消息,它是一個(gè)每次變動(dòng)的數(shù)值,可以是單獨(dú)的隨機(jī)數(shù)或時(shí)間戳,或者,為了方便第二服務(wù)器識(shí)別待下載的第二文件,該隨機(jī)信息還可是第二文件的第二數(shù)字指紋與隨機(jī)數(shù)或時(shí)間戳的組合,其中,第二文件的第二數(shù)字指紋可以與隨機(jī)數(shù)或時(shí)間戳直接拼接起來,或者也可以采用其他方式封裝在隨機(jī)信息中,此處不做限制。因此,該數(shù)字簽名函數(shù)返回的結(jié)果即為第一云存儲(chǔ)用自身的私鑰對(duì)隨機(jī)信息r的第一數(shù)字簽名。
進(jìn)而,在第一云存儲(chǔ)計(jì)算得出該第一數(shù)字簽名后,可向第二云存儲(chǔ)發(fā)送重定向請(qǐng)求,即將用戶下載文件的請(qǐng)求重定向鏈接到存儲(chǔ)有該第二文件的云存儲(chǔ)。其中,該重定向請(qǐng)求中包括計(jì)算得到的第一數(shù)字簽名(即服務(wù)證據(jù)evidence)、上述隨機(jī)信息r,以及第一云存儲(chǔ)的公鑰pub。
第二云存儲(chǔ)在接收到該重定向請(qǐng)求后,將提取該重定向請(qǐng)求中的服務(wù)證據(jù)并保存,根據(jù)該服務(wù)證據(jù)以及隨機(jī)信息r和第一云存儲(chǔ)的公鑰,通過如下方式驗(yàn)證其中第一數(shù)字簽名的合法性:
f=verify(pub,r,evidence)公式二
其中,f為數(shù)據(jù)簽名驗(yàn)證函數(shù)的返回結(jié)果,其可為一數(shù)值量或邏輯量;verify(pub,r,evidence)為數(shù)字簽名驗(yàn)證函數(shù),該函數(shù)具有3個(gè)參數(shù),分別為pub、r、evidence;具體的,pub是指第一云存儲(chǔ)的公鑰(即簽名者的公鑰),r同公式一中相同,是指隨機(jī)信息,即簽名者簽名的消息,evidence為第一云存儲(chǔ)對(duì)隨機(jī)信息r的數(shù)字簽名,即第一數(shù)字簽名;若該數(shù)字簽名驗(yàn)證函數(shù)返回的結(jié)果為真(即f的值不為0),則證明該第一數(shù)字簽名確實(shí)是第一云存儲(chǔ)所簽,驗(yàn)證通過,否則,若數(shù)字驗(yàn)證驗(yàn)證函數(shù)返回的結(jié)果為假(f的值為0),則證明該第一數(shù)字簽名不是第一云存儲(chǔ)所簽,驗(yàn)證不通過。
若第二云存儲(chǔ)驗(yàn)證第一數(shù)字簽名合法,則第二云存儲(chǔ)進(jìn)一步通過獲取隨機(jī)信息r中的第二文件的數(shù)字指紋,確定出待下載的第二文件,進(jìn)而,可為所述用戶提供下載所述第二文件的服務(wù),將第二文件發(fā)送給客戶端。
此外,若第二云存儲(chǔ)根據(jù)第一數(shù)字簽名,確定出第一數(shù)字簽名曾經(jīng)出現(xiàn)過,則說明第一云存儲(chǔ)采用該第一數(shù)字簽名多次向第二云存儲(chǔ)請(qǐng)求下載該文件,在這種情況下,第二云存儲(chǔ)可拒絕該下載請(qǐng)求。
需要說明的是,本發(fā)明實(shí)施例中,由于用戶通過客戶端下載的文件一定是用戶之前通過該客戶端向第一服務(wù)器上傳的,因此,若用戶通過客戶端下載的第二文件為加密文件,客戶端中存儲(chǔ)的該文件的數(shù)字指紋即為下載的第二文件進(jìn)行解密的密鑰,在第一服務(wù)器或第二服務(wù)器將所述第二文件發(fā)送給客戶端后,客戶端可根據(jù)其存儲(chǔ)的該文件的數(shù)字指紋對(duì)下載的第二文件進(jìn)行解密。
可見,在上述文件的下載的過程中,若用戶通過第一云存儲(chǔ)下載的第二文件存儲(chǔ)在第二云存儲(chǔ)上,第一云存儲(chǔ)重定向鏈接到第二云存儲(chǔ)的過程中還產(chǎn)生了服務(wù)證據(jù)(即第一云存儲(chǔ)對(duì)隨機(jī)信息r的數(shù)字簽名),如果第一云存儲(chǔ)和第二云存儲(chǔ)之間訂立有其他合約,比如存儲(chǔ)托管服務(wù)等,第二云存儲(chǔ)可在日后憑借該服務(wù)證據(jù)向第一云存儲(chǔ)執(zhí)行某些清算協(xié)議,比如說,索取一筆手續(xù)費(fèi)等等,此處不做具體限制。
本發(fā)明實(shí)施例中,通過引入?yún)^(qū)塊鏈數(shù)據(jù)庫和數(shù)字簽名技術(shù),達(dá)成了云存儲(chǔ)聯(lián)盟,因而,可充分利用了多個(gè)云存儲(chǔ)的存儲(chǔ)空間,使得云存儲(chǔ)聯(lián)盟內(nèi)的每個(gè)云存儲(chǔ)不需要存儲(chǔ)所有的文件,卻呈現(xiàn)出持有云存儲(chǔ)聯(lián)盟內(nèi)所有文件的效果,大大減小了云存儲(chǔ)聯(lián)盟內(nèi)每個(gè)云存儲(chǔ)的存儲(chǔ)和管理開銷,保護(hù)了用戶數(shù)據(jù)的完整性,同時(shí)實(shí)現(xiàn)了多個(gè)云存儲(chǔ)之間的數(shù)據(jù)共享、用戶共享和收益共享。
基于同樣的發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供一種服務(wù)器,所述服務(wù)器為云存儲(chǔ)中的服務(wù)器,所述服務(wù)器可參照上述方法,為用戶提供在云存儲(chǔ)中存儲(chǔ)數(shù)據(jù)的服務(wù)。如圖5所示,所述服務(wù)器500包括:
收發(fā)模塊501,所述收發(fā)模塊501用于接收客戶端發(fā)送的用于上傳第一文件的文件上傳請(qǐng)求;所述文件上傳請(qǐng)求是所述客戶端接收到用戶的文件上傳指令后發(fā)送的,所述文件上傳請(qǐng)求中包括所述客戶端根據(jù)所述第一文件計(jì)算得到的第一數(shù)字指紋;
查詢模塊502,所述查詢模塊502用于根據(jù)所述第一數(shù)字指紋,計(jì)算得到所述第一文件的第二數(shù)字指紋,并根據(jù)所述第一文件的第二數(shù)字指紋,查詢區(qū)塊鏈數(shù)據(jù)庫;
處理模塊503,所述處理模塊503用于若確定所述區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有所述第一文件的第二數(shù)字指紋,則記錄所述用戶對(duì)所述第一文件的所有權(quán),并通過所述收發(fā)模塊501向所述客戶端發(fā)送第一指示信息;所述第一指示信息用于指示所述客戶端不再上傳所述第一文件,所述區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有多個(gè)服務(wù)器中所存儲(chǔ)的文件的第二數(shù)字指紋,所述第一服務(wù)器為所述多個(gè)服務(wù)器中的任一服務(wù)器。
可選地,所述處理模塊503還用于:
若確定所述區(qū)塊鏈數(shù)據(jù)庫中未存儲(chǔ)有所述第一文件的第二數(shù)字指紋,則通過所述收發(fā)模塊501向所述客戶端發(fā)送第二指示信息,并將所述第一文件的第二數(shù)字指紋寫入所述區(qū)塊鏈數(shù)據(jù)庫;第二指示信息用于指示所述客戶端上傳所述第一文件。
可選地,所述文件上傳請(qǐng)求中還包括對(duì)所述第一文件的加密處理指示;
所述處理模塊503還用于:
記錄所述用戶對(duì)第一加密文件的所有權(quán),并向所述客戶端發(fā)送第一指示信息;所述第一加密文件為所述客戶端根據(jù)所述加密處理指示對(duì)所述第一文件進(jìn)行加密得到的,所述第一指示信息用于指示所述客戶端不再上傳所述第一加密文件。
可選地,所述收發(fā)模塊501還用于:
接收所述客戶端發(fā)送的用于下載第二文件的文件下載請(qǐng)求;所述文件下載請(qǐng)求中包括所述第二文件的第一數(shù)字指紋;
所述處理模塊503還用于:
根據(jù)所述第二文件的第一數(shù)字指紋,計(jì)算所述第二文件的第二數(shù)字指紋,并根據(jù)所述第二文件的第二數(shù)字指紋,以及文件的第二數(shù)字指紋和服務(wù)器的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,若確定與所述第二文件的第二數(shù)字指紋對(duì)應(yīng)的服務(wù)器的標(biāo)識(shí)為所述第一服務(wù)器的標(biāo)識(shí),則通過所述收發(fā)模塊501將自身存儲(chǔ)的所述第二文件并發(fā)送給所述客戶端;若確定與所述第二文件的第二數(shù)字指紋對(duì)應(yīng)的服務(wù)器的標(biāo)識(shí)為第二服務(wù)器的標(biāo)識(shí),則通過所述收發(fā)模塊501指示所述第二服務(wù)器將所述第二文件發(fā)送給所述客戶端,所述第二服務(wù)器為所述多個(gè)服務(wù)器中的另一服務(wù)器。
可選地,所述處理模塊503還用于:
根據(jù)私鑰計(jì)算對(duì)隨機(jī)信息的第一數(shù)字簽名;
所述收發(fā)模塊501還用于:
向所述第二服務(wù)器發(fā)送重定向請(qǐng)求,所述重定向請(qǐng)求中包括所述第一數(shù)字簽名、所述隨機(jī)信息和公鑰;所述重定向請(qǐng)求用于所述第二服務(wù)器根據(jù)所述第一數(shù)字簽名、所述隨機(jī)信息和公鑰驗(yàn)證所述第一數(shù)字簽名合法后,將所述第二文件發(fā)送給所述客戶端。
基于同樣的發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供一種客戶端,所述客戶端具體為云存儲(chǔ)的客戶端,所述客戶端可參照上述方法,為用戶提供向云存儲(chǔ)中上傳文件或者從云存儲(chǔ)中下載文件的服務(wù)。如圖6所示,所述客戶端600包括:
收發(fā)模塊601,所述收發(fā)模塊601用于接收用戶的文件上傳指令;
處理模塊602,所述處理模塊602用于根據(jù)所述文件上傳指令,確定出待上傳的第一文件;以及,根據(jù)所述第一文件,計(jì)算得到第一數(shù)字指紋;
所述收發(fā)模塊601還用于根據(jù)所述第一數(shù)字指紋,向服務(wù)器發(fā)送文件上傳請(qǐng)求;所述文件上傳請(qǐng)求中包括所述第一數(shù)字指紋;以及,接收所述服務(wù)器發(fā)送的指示信息;
所述處理模塊602還用于,若確定所述指示信息為第一指示信息,則確定不上傳所述第一文件;若確定所述指示信息為第二指示信息,則通過所述收發(fā)模塊601上傳所述第一文件。
可選地,所述文件上傳指令中還包括對(duì)所述第一文件的加密處理指示;
所述處理模塊602還用于:
根據(jù)所述加密處理指示,計(jì)算所述第一文件的數(shù)字指紋;
根據(jù)所述第一文件的數(shù)字指紋,對(duì)所述第一文件進(jìn)行加密,得到第一加密文件;
計(jì)算所述第一加密文件的數(shù)字指紋,得到所述第一數(shù)字指紋。
可選地,所述處理模塊602還用于:
接收用戶的文件下載指令;
所述處理模塊602還用于:
根據(jù)所述文件下載指令,確定待下載的第二文件;
根據(jù)所述客戶端中文件與文件的數(shù)字指紋的對(duì)應(yīng)關(guān)系,確定出所述第二文件的第一數(shù)字指紋;
所述收發(fā)模塊601還用于:
根據(jù)所述第二文件的第一數(shù)字指紋,向所述服務(wù)器發(fā)送文件下載請(qǐng)求。
由上述內(nèi)容可以看出:
本發(fā)明實(shí)施例中,第一服務(wù)器接收客戶端發(fā)送的文件上傳請(qǐng)求,根據(jù)所述文件上傳請(qǐng)求中的第一數(shù)字指紋,計(jì)算第一文件的第二數(shù)字指紋,并根據(jù)該第二數(shù)字指紋,查詢區(qū)塊鏈數(shù)據(jù)庫,若確定區(qū)塊鏈數(shù)據(jù)庫中存儲(chǔ)有第一文件的第二數(shù)字指紋,則直接記錄用戶對(duì)第一文件的所有權(quán),向客戶端發(fā)送第一指示信息,以指示客戶端不再上傳第一文件。由于所述區(qū)塊鏈數(shù)據(jù)庫中可存儲(chǔ)有多個(gè)服務(wù)器中所存儲(chǔ)的文件的第二數(shù)字指紋,因而,通過查詢?cè)搮^(qū)塊鏈數(shù)據(jù)庫,第一服務(wù)器可確定多個(gè)服務(wù)器中是否有服務(wù)器存儲(chǔ)有該第一文件,若存有該第一文件,則無需用戶再次上傳該第一文件,從而,可實(shí)現(xiàn)了多個(gè)服務(wù)器中不會(huì)存儲(chǔ)重復(fù)的文件,有效避免了現(xiàn)有技術(shù)中對(duì)云存儲(chǔ)的服務(wù)器中存儲(chǔ)的數(shù)據(jù)進(jìn)行去重處理所引起的計(jì)算量很大的問題,同時(shí),也節(jié)省了用戶的上傳帶寬和上傳時(shí)間。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或兩個(gè)以上其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、cd-rom、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或兩個(gè)以上流程和/或方框圖一個(gè)方框或兩個(gè)以上方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或兩個(gè)以上流程和/或方框圖一個(gè)方框或兩個(gè)以上方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或兩個(gè)以上流程和/或方框圖一個(gè)方框或兩個(gè)以上方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。