資源檔案管理功能

2022-07-08 07:39:13 字數 2734 閱讀 7263

功能:

1:新增

1.1:同一目錄下支援單檔案上傳和多檔案上傳,每次上傳會生成乙個精確到秒的時間戳作為操作批次號儲存在修改記錄表中,並備份資料

1.2:上傳壓縮檔案並後台執行解壓上傳,實現批量不同目錄檔案批量上傳

2:檢視檔案內容(支援txt和png)

3:修改檔案內容

3.1:檢視txt檔案後可以進行修改,修改後提交檔案同時會生成乙個精確到秒的時間戳作為操作批次號儲存在修改記錄表中,並備份資料

4:刪除檔案

6.1:資源檔案繼承和版本線繼承規則不一樣,第三位到最後一位保持一致,對比前兩位倒序排序,且版本線位數一致。 例如新增4.2.0版本線配置時會提示是否繼承4.1.0的資源檔案

7:將開發檔案發布

7.1:通過檔案標識區分dev和release檔案。

8:壓縮發布檔案

8.1:將執行壓縮的檔案僅包含release檔案。

9:檢視修改記錄

9.1:通過修改記錄可以檢視使用者操作資訊,且使用者的每個動作都會有乙個唯一批次號,通過批次號可以觸發回滾

10:回滾

11:資料備份

問題:1:windows(gbk)和linux(utf-8)系統壓縮檔案中檔名的編碼方式不同需要轉碼

解決方案1:使用7z壓縮工具進行解壓,工具自己

解決方案2:使用**手動轉碼

def zip_encode(file_path, zip_file_dir, sys):

"""轉碼壓縮

encoding支援gb2312和utf-8

windows 下轉為gb2312 linux下轉為utf-8

sys: windows/linux

"""logger.info("file_path:%s, zip_file_dir:%s, sys:%s" % (file_path, zip_file_dir, sys))

if zipfile.is_zipfile(file_path):

logger.info("is_zip")

with zipfile.zipfile(file_path, 'r') as z:

logger.info("start unzip")

for name in z.namelist():

name_encoding = chardet.detect(name)["encoding"].lower()

if (sys == "windows" and name_encoding != "utf-8") or (sys == "linux" and name_encoding == "utf-8"):

# 不需要轉碼(windows解壓非utf-8,linux解壓utf-8)

z.extractall(path=zip_file_dir.encode("utf-8"))

return

else:

# 需要轉碼

logger.info("start encoding")

# windows下解壓utf-8/linux下解壓非utf-8

if name_encoding != "utf-8":

file_name = name.decode("gb2312").encode("utf-8")

else:

file_name = name

absolute_path = os.path.normpath(os.path.join(zip_file_dir, file_name))

logger.info("file_name: %s, absolute_path:%s" % (file_name, absolute_path))

if file_name.endswith('/'):

os.makedirs(absolute_path)

else:

dir_path = os.path.dirname(absolute_path)

if not os.path.exists(dir_path):

os.makedirs(dir_path)

data = z.read(name)

with open(absolute_path, "wb") as f:

f.write(data)

2:如何實現實現備份

解決方案:新增或修改後備份檔案

3:資源檔案回滾

解決方案:回滾分為兩種情況,向前回滾和向後回滾兩種情況。

場景:現有a批次號和b批次號,且b批次號是在a批次號之後生成的。

向前回滾指:由b節點回滾到a節點狀態

向後回滾指:由a節點回滾到b節點

注意:回滾操作僅支援支援一條主線如果出現新分支會自動刪除舊分支的修改記錄,例如由b節點回退到a節點,由a節點又生成了c節點,在生成c節點的同時會自動刪除b節點的修改記錄保證一條主線。

向前回滾實現方式

1:獲取a、b節點中修改的檔案記錄list,並去重

2:獲取b節點之前在list中的最新修改記錄list2,通過select max group by file_path實現。

3:通過計算list和list2差集得到list中新增檔案集合list3

4:刪除list3中的檔案

5:恢復list2中的檔案

6:回滾完成

向後回滾實現方式

1:獲取a、b節點中修改的檔案記錄list,去重獲取最新修改記錄。

2:恢復list中中檔案

3:回滾完成

4:併發問題解決

在每個執行操作前都會新增事務鎖

靜態資源檔案管理

我們知道不同於apache的是,nodejs中檔案的實體地址與其真實的位址完全沒有關係,也就是說,如果你在位址列輸入 我們可以訪問到乙個真實位址完全沒有關係的檔案,這是為什麼嘞?因為我們可以在 中這樣寫 現在我們想實現乙個目標,就是我們在位址列輸入路徑輸入的就是對應我們需要的檔案 檔案結構如下 在s...

MFC資源檔案( rc檔案)的管理

resource.h就是.rc檔案的標頭檔案 rc檔案裡的常量全在resource.h定義 rc檔案包含了整個工程的所有資源資訊,包括對話方塊 位圖 選單 圖示 工具欄以及字串等資源 他們 pushbutton 學號 idc button1,25,75,62,22 pushbutton 姓名 idc...

C 資源檔案

獲取資源檔案 using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.text using system...