本發(fā)明涉及存儲技術(shù)領(lǐng)域,特別涉及一種文件排重方法和裝置。
背景技術(shù):
在存儲設(shè)備中,文件數(shù)據(jù),特別是一些音視頻文件,占用存儲空間特別多。如果多個用戶共用一個存儲空間時,經(jīng)常會出現(xiàn)不同用戶存儲相同內(nèi)容的文件的情況,導(dǎo)致文件的重復(fù)存儲,占用不必要的存儲空間,造成存儲空間浪費(fèi)。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種文件排重方法和裝置,能夠避免文件的重復(fù)存放,減少存儲資源浪費(fèi)。
為了達(dá)到上述目的,本發(fā)明提供了如下技術(shù)方案:
一種文件排重方法,應(yīng)用于存儲設(shè)備,該方法包括:
獲取待存儲文件,基于待存儲文件的文件內(nèi)容生成待存儲文件的標(biāo)識值;
比較存儲設(shè)備中所有已存儲文件的標(biāo)識值與待存儲文件的標(biāo)識值,如果存在一已存儲文件與待存儲文件具有相同的標(biāo)識值,則生成指向該已存儲文件的鏈接,將該鏈接作為待存儲文件存儲到目標(biāo)文件路徑,否則,將待存儲文件存儲到目標(biāo)文件路徑,并將待存儲文件的標(biāo)識值存儲為待存儲文件的屬性。
一種文件排重裝置,應(yīng)用于存儲設(shè)備,該裝置包括:獲取單元、生成單元、比較單元、處理單元;
所述獲取單元,用于獲取待存儲文件;
所述生成單元,用于基于待存儲文件的文件內(nèi)容生成待存儲文件的標(biāo)識值;
所述比較單元,用于比較存儲設(shè)備中所有已存儲文件的標(biāo)識值與待存儲文件的標(biāo)識值;
所述處理單元,用于如果比較單元判定存儲設(shè)備中存在一已存儲文件與待存儲文件具有相同的標(biāo)識值,則生成指向該已存儲文件的鏈接,將該鏈接作為待存儲文件存儲到目標(biāo)文件路徑,否則,將待存儲文件存儲到目標(biāo)文件路徑,并將待存儲文件的標(biāo)識值存儲為待存儲文件的屬性。
由上面的技術(shù)方案可知,本發(fā)明中,通過將存儲設(shè)備中的已存儲文件的標(biāo)識值與待存儲文件的標(biāo)識值進(jìn)行比較,確定存儲設(shè)備中是否已經(jīng)存儲有與待存儲文件具有相同文件內(nèi)容的已存儲文件,存在則生成指向已存儲文件的鏈接,將該鏈接作為待存儲文件,從而可以使得同一內(nèi)容的文件在存儲設(shè)備中僅存儲一份??梢钥闯?,本發(fā)明能夠避免文件的重復(fù)存放,減少存儲資源浪費(fèi)。
附圖說明
圖1是本發(fā)明實(shí)施例文件排重方法的流程圖;
圖2是本發(fā)明實(shí)施例文件排重裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,下面結(jié)合附圖并據(jù)實(shí)施例,對本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說明。
參見圖1,圖1是本發(fā)明實(shí)施例文件排重方法的流程圖,該方法應(yīng)用于存儲設(shè)備,主要包括以下步驟:
步驟101、獲取待存儲文件,基于待存儲文件的文件內(nèi)容生成待存儲文件的標(biāo)識值。
待存儲文件為用戶上傳的文件,或者其它來源的文件。
在進(jìn)行文件排重時,如果直接進(jìn)行文件內(nèi)容對比來確定是否是相同內(nèi)容的文件,由于文件內(nèi)容的數(shù)據(jù)量較大,排重效率會非常低下,因此本實(shí)施例中通過文件的標(biāo)識值進(jìn)行排重。
文件的標(biāo)識值可以是任何可以標(biāo)識文件內(nèi)容的特征值,在本實(shí)施例中,采用將基于文件內(nèi)容生成的MD5(Message-Digest Algorithm 5,信息-摘要算法5)值作為文件的標(biāo)識值。
步驟102、比較存儲設(shè)備中所有已存儲文件的標(biāo)識值與待存儲文件的標(biāo)識值,如果存在一已存儲文件與待存儲文件具有相同的標(biāo)識值,則生成指向該已存儲文件的鏈接,將該鏈接作為待存儲文件存儲到目標(biāo)文件路徑,否則,將待存儲文件存儲到目標(biāo)文件路徑,并將待存儲文件的標(biāo)識值存儲為待存儲文件的屬性。
本實(shí)施例中,在將文件存儲到存儲設(shè)備之前,生成文件對應(yīng)的標(biāo)識值(MD5),在將文件存儲到存儲設(shè)備中時,同時將文件的標(biāo)識值存儲為文件的一個屬性。以后查找該文件的標(biāo)識值時,直接通過獲取該文件的屬性的方式獲取該文件的標(biāo)識值。將文件的標(biāo)識值存儲為文件的屬性的方法,一方面可以極大的提高了獲取該文件的標(biāo)識值的效率,另一方面也可以使得文件的標(biāo)識值隨文件的位置變化而遷移,相對于現(xiàn)有技術(shù)將文件的標(biāo)識值(MD5)簡單的記錄在一個系統(tǒng)的配置文件里面的作法,可以避免因系統(tǒng)配置文件壞掉而導(dǎo)致存儲設(shè)備中所有文件的標(biāo)識值(MD5)丟失的情況。
當(dāng)有新的待存儲文件時,可以通過將待存儲文件的標(biāo)識值與存儲設(shè)備中當(dāng)前已存儲的所有文件的標(biāo)識值進(jìn)行比較,確定是否存在與待存儲文件具有相同標(biāo)識值的已存儲文件,如果存在,則說明待存儲文件的文件內(nèi)容在存儲設(shè)備中已經(jīng)存在,不需要再多存儲一份,因此需要執(zhí)行排重操作,如果不存在,則說明待存儲文件的文件內(nèi)容在存儲設(shè)備中尚未存在,可以直接執(zhí)行存儲操作即可。
當(dāng)確定存儲設(shè)備中存在與待存儲文件具有相同標(biāo)識值的已存儲文件后,執(zhí)行的排重操作為:生成指向該已存儲文件的鏈接,將該鏈接作為待存儲文件存儲到目標(biāo)文件路徑。然而,考慮到該已存儲文件所在文件路徑(也即文件目錄)與待存儲文件的目標(biāo)文件路徑相同的情況下,可以直接將該已存儲文件作為待存儲文件,不需要再生成指向該已存儲文件的鏈接。
因此,在本實(shí)施例中,在確定存儲設(shè)備中存在與待存儲文件具有相同標(biāo)識值的已存儲文件之后,生成指向該已存儲文件的鏈接,將該鏈接作為待存儲文件存儲到目標(biāo)文件路徑之前,需要先判斷該已存儲文件所在文件路徑與待存儲文件的目標(biāo)文件路徑是否相同,相同則根據(jù)需求返回上傳成功信息到上傳待存儲文件的設(shè)備,然后結(jié)束本次存儲操作,或者直接結(jié)束本次存儲操作;不同則再執(zhí)行生成指向該已存儲文件的鏈接,將該鏈接作為待存儲文件存儲到目標(biāo)文件路徑的操作,此時還可以根據(jù)需求返回上傳成功信息到上傳待存儲文件的設(shè)備。
另外,在確定存儲設(shè)備中存在與待存儲文件具有相同標(biāo)識值的已存儲文件后,生成指向該已存儲文件的鏈接,將該鏈接作為待存儲文件存儲到目標(biāo)文件路徑時,還需要將待存儲文件的文件名稱設(shè)置作為該鏈接的名稱,從而使得用戶可以將該鏈接看作待存儲文件。
在實(shí)際應(yīng)用中,同一路徑下不允許存儲具有相同文件名稱的多份文件,因此,在執(zhí)行步驟102之前,可以先比較目標(biāo)文件路徑下的所有已存儲文件的文件名稱與待存儲文件的文件名稱,如果目標(biāo)文件路徑下存在一已存儲文件與待存儲文件具有相同的文件名稱,則可以輸出重名提示(與現(xiàn)有技術(shù)相同,提示用戶選擇覆蓋原文件、或不覆蓋原文件而是修改待存儲文件的名稱),若接收到用戶的覆蓋重名文件請求,則刪除該已存儲文件,并繼續(xù)執(zhí)行步驟102的操作,如果接收到用戶在選擇不覆蓋重名文件后輸入的新的文件名稱,則將新的文件名稱作為待存儲文件的文件名稱,并繼續(xù)執(zhí)行步驟102的操作。
以上對本發(fā)明實(shí)施例文件排重方法進(jìn)行了詳細(xì)說明,本發(fā)明還提供了一種文件排重裝置,以下結(jié)合圖2進(jìn)行詳細(xì)說明。
參見圖2,圖2是本發(fā)明實(shí)施例文件排重裝置的結(jié)構(gòu)示意圖,該裝置應(yīng)用于存儲設(shè)備,主要包括:獲取單元201、生成單元202、比較單元203、處理單元204;其中,
獲取單元201,用于獲取待存儲文件;
生成單元202,用于基于待存儲文件的文件內(nèi)容生成待存儲文件的標(biāo)識值;
比較單元203,用于比較存儲設(shè)備中所有已存儲文件的標(biāo)識值與待存儲文件的標(biāo)識值;
處理單元204,用于如果比較單元203判定存儲設(shè)備中存在一已存儲文件與待存儲文件具有相同的標(biāo)識值,則生成指向該已存儲文件的鏈接,將該鏈接作為待存儲文件存儲到目標(biāo)文件路徑,否則,將待存儲文件存儲到目標(biāo)文件路徑,并將待存儲文件的標(biāo)識值存儲為待存儲文件的屬性。
圖2所示裝置中,
所述比較單元203,比較所有已存儲文件的標(biāo)識值與待存儲文件的標(biāo)識值之前,進(jìn)一步用于:比較目標(biāo)路徑下的所有已存儲文件的文件名稱與待存儲文件的文件名稱,如果目標(biāo)路徑下存在一已存儲文件與待存儲文件具有相同的文件名稱,則輸出重名提示,若接收到用戶的覆蓋重名文件請求,則刪除該已存儲文件,并繼續(xù)執(zhí)行比較存儲設(shè)備中所有已存儲文件的標(biāo)識值與待存儲文件的標(biāo)識值的操作,如果接收到用戶在選擇不覆蓋重名文件后輸入的新的文件名稱,則將新的文件名稱作為待存儲文件的文件名稱,并繼續(xù)執(zhí)行比較存儲設(shè)備中所有已存儲文件的標(biāo)識值與待存儲文件的標(biāo)識值的操作。
圖2所示裝置中,
所述處理單元204,在比較單元203確定存儲設(shè)備中存在一已存儲文件與待存儲文件的標(biāo)識值相同之后,生成指向該已存儲文件的鏈接,將該鏈接作為待存儲文件存儲到目標(biāo)文件路徑之前,進(jìn)一步用于:
判斷該已存儲文件所在的文件路徑與待存儲文件的目標(biāo)文件路徑是否相同,如果相同,則結(jié)束本次存儲操作,否則,生成指向該已存儲文件的鏈接,將該鏈接作為待存儲文件存儲到目標(biāo)文件路徑。
圖2所示裝置中,
所述待存儲文件為用戶上傳的文件;
所述處理單元204,結(jié)束本次存儲操作之前,進(jìn)一步用于:輸出上傳成功信息;
所述處理單元204,生成指向該已存儲文件的鏈接,將該鏈接作為待存儲文件存儲到目標(biāo)文件路徑之后,進(jìn)一步用于:輸出上傳成功信息。
圖2所示裝置中,
所述處理單元204,將該鏈接作為待存儲文件存儲到目標(biāo)文件路徑時,進(jìn)一步將待存儲文件的文件名稱作為該鏈接的名稱。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。