本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
當您需要批量上傳文件、按特定目錄結構上傳文件、上傳完整的文件或對文件快速進行資源分發時,可以配置解壓規則,上傳ZIP文件到OSS指定路徑,觸發函數計算自動解壓,并將解壓后內容保存回OSS。
前提條件
已開通函數計算服務。您可以在函數計算的產品詳情頁面開通函數計算服務。
使用場景
批量上傳:當您有大量小文件需要上傳時,使用程序上傳耗時較多,此時可以使用ZIP包解壓功能,將文件打包上傳。
上傳完整的文件:出于資源完整性考慮,有時需要將多個文件組合成一個資源,而將多個文件分別上傳可能成功率不高,此時可以使用ZIP包解壓功能,提升上傳成功率。
按特定目錄結構上傳:網站中引用了很多靜態資源,資源的目錄結構比較復雜,如果在OSS中逐一新建目錄上傳文件的話耗時很長。此時可以在本地定義ZIP包中目錄結構,壓縮后上傳到OSS,使用ZIP包解壓功能解壓使用。
資源分發:在需要將大量文件分發給用戶或不同服務器時,可以將這些文件打包成ZIP包,并使用OSS ZIP包解壓功能將ZIP包解壓到指定目錄。這樣可以減少傳輸時間和帶寬消耗。
實現原理
ZIP包解壓結合函數計算完成ZIP文件的解壓工作,解壓流程如下圖所示。
“匹配解壓規則后綴”的ZIP文件上傳到“滿足OSS解壓規則前綴”的目錄。
自動觸發函數計算。
配置ZIP包解壓規則時需要觸發器授權,以便OSS使用觸發器角色AliyunOSSEventNotificationRole調用函數計算,觸發器授權時自動為該角色授予調用函數計算的權限策略。
函數計算解壓ZIP文件,并將解壓后的文件存儲至OSS的指定目錄中。
配置ZIP包解壓規則時需要給函數計算服務授權。授權時將新建角色,函數計算使用角色獲取OSS上的ZIP包,并將解壓后的文件保存回OSS。新建角色時會同步授予角色相應的權限策略(對OSS Bucket的讀寫權限)。
費用說明
ZIP包解壓功能是增值服務,將產生OSS和函數計算相關費用:
OSS:請求Bucket的資源的請求數計費和存儲費用。更多信息,請參見OSS計費概述。
函數計算:vCPU使用量費用和內存使用量費用,按執行時間計費。例如:ZIP包解壓執行了5分鐘,vCPU是2核,內存是3GB,計費為2*0.00009*300+3*0.000009*300=0.0621元。更多信息,請參見FC計費概述。
Bucket資源和函數計算資源通過Bucket的內網域名進行傳輸,內網域名傳輸數據免流量費用。
使用限制
地域限制:僅華東1(杭州)、華東2(上海)、華北1(青島)、華北2(北京)、華北 3(張家口)、華北5(呼和浩特)、華南1(深圳)、西南1(成都)、中國香港、新加坡、馬來西亞(吉隆坡)、印度尼西亞(雅加達)、日本(東京)、德國(法蘭克福)、英國(倫敦)、美國(弗吉尼亞)、美國(硅谷)地域的存儲空間支持ZIP包解壓。
無地域屬性的存儲空間不支持ZIP包解壓。
存儲類型限制:冷歸檔或者深度冷歸檔存儲類型的文件需先解凍再解壓;歸檔存儲類型的文件,如果所在Bucket未開啟歸檔直讀,需先解凍再解壓。
文件或文件夾命名限制:建議使用UTF-8或GB 2312編碼命名您的文件或文件夾,否則可能會出現解壓后的文件或文件夾名稱出現亂碼、解壓過程中斷等問題。
壓縮包限制:ZIP壓縮包中單個文件的大小不超過1 GB,解壓單個壓縮包默認的最大時間是2小時,超過2小時可以調整函數最大執行時長,詳情請參見解壓超大文件解壓超過2h任務失敗。
配置ZIP包解壓規則
登錄OSS管理控制臺。
單擊Bucket 列表,然后單擊目標Bucket名稱。
在左側導航欄,選擇 。
單擊ZIP 包解壓,在ZIP 包解壓面板配置ZIP包解壓規則。
參數說明
參數
是否必選
說明
服務授權
是
授予函數計算讀寫OSS和執行函數的權限。
單擊授權按鈕,然后按照提示完成授權。
觸發器授權
是
授予OSS訪問函數計算的權限。
單擊授權按鈕,然后按照提示完成授權。如果已完成授權,此項顯示為觸發器角色。
前綴
否
配置觸發函數計算的文件前綴。您上傳指定前綴的ZIP文件或將ZIP文件上傳至指定目錄會觸發函數計算。置空此項則匹配所有上傳的ZIP文件。
重要置空此項可能會觸發循環執行,建議您配置文件前綴。更多信息,請參見如何避免循環觸發?。
目標目錄
否
填寫ZIP文件解壓后存放的目錄。置空此項,函數計算會將ZIP文件解壓到當前Bucket的根目錄。
如果您需要在目標目錄中保留ZIP文件名,則選中保留壓縮文件名為路徑目錄。
如果您不需要保留ZIP文件名,直接將解壓后的文件存放在目標目錄,則選中直接解壓到目標目錄中。配置詳情請參見以下配置示例。
警告為避免影響OSS-HDFS服務的正常使用或者引發數據污染、數據丟失的風險,在開通了OSS-HDFS服務的Bucket中配置ZIP包解壓規則時,禁止將目標目錄填寫為
.dlsdata/
。配置示例
場景
配置方法
解壓后的文件結構
所有上傳至zipfolder目錄的ZIP包均解壓到destfolder目錄,不保留ZIP包名稱。
前綴設置為zipfolder/。
目標目錄設置為destfolder。
選中直接解壓到目標目錄中。
bucket ├─── zipfolder/ │ ├─── a.zip│ └─── b.zip└─── destfolder/ ├─── a.txt ├─── b.txt └─── ...
所有上傳至zipfolder目錄的ZIP包均解壓到根目錄,保留ZIP包名稱。
您需要配置如下參數:
前綴設置為zipfolder/。
目標目錄設置為空。
選中保留壓縮文件名為路徑目錄。
bucket ├─── zipfolder/ │ ├─── a.zip│ └─── b.zip├─── a/│ ├─── a.txt│ └─── ...└─── b/ ├─── b.txt └─── ...
所有上傳至zipfolder目錄的ZIP包均解壓到destfolder目錄,保留ZIP包名稱。
您需要配置如下參數:
前綴設置為zipfolder/。
目標目錄設置為destfolder。
選中保留壓縮文件名為路徑目錄。
bucket ├─── zipfolder/ │ ├─── a.zip│ └─── b.zip└─── destfolder/ ├─── a/ │ ├─── a.txt │ └─── ... └─── b/ ├─── b.txt └─── ...
選中我已知曉并同意開通函數計算,通過函數計算處理壓縮文件。壓縮文件里面的文件名或文件夾名不支持非UTF-8或GB 2312編碼后,單擊確定。
修改ZIP包解壓配置
您可以根據自己的需求修改ZIP包解壓的配置。
修改觸發函數計算的文件前綴
在OSS控制臺的ZIP 包解壓頁面,單擊目標觸發器右側的編輯。
在彈出的函數詳情頁面下的觸發器管理頁簽,單擊目標觸發器右側的編輯。
在編輯觸發器對話框,修改文件前綴,其他參數保持默認配置。
單擊確定。
修改函數計算配置
在函數計算控制臺的函數詳情頁面下的函數配置頁簽,單擊目標觸發器右側的編輯。
根據實際需求,修改函數計算相關配置,例如函數執行內存、執行超時時間等。
具體操作,請參見管理函數。
刪除觸發器
刪除后無法恢復,且不能繼續使用當前觸發器觸發函數。執行中的任務會繼續進行。
在函數詳情頁面下的觸發器管理頁簽,單擊目標觸發器右側的刪除。
在彈出的對話框,單擊刪除。
相關文檔
常見問題
ZIP包解壓涉及OSS與函數計算服務的關聯調用。ZIP文件上傳到OSS后,OSS觸發函數計算執行解壓操作。OSS觸發函數計算的調用可能失敗,您可以在響應Header中通過x-oss-event-status
的值(Base64編碼)判斷是否成功觸發解壓。如果x-oss-event-status
的值解碼后為{"Result": "Ok"},表示成功觸發解壓。如果x-oss-event-status
的值解碼后不為{"Result": "Ok"},表示觸發解壓失敗,建議重新上傳ZIP文件。具體操作,請參見簡單上傳。
ZIP壓縮包中單個文件的大小不超過1 GB,解壓單個壓縮包的最大時間是2小時。
函數默認最大執行時間是2h,配置ZIP包解壓規則后可以在函數計算控制臺修改時間,最大支持24h。
在OSS控制臺的ZIP 包解壓頁面,單擊目標觸發器右側的編輯。
在彈出的函數詳情頁面下單擊函數配置頁簽。
單擊環境信息右側的編輯。
修改執行超時時間,然后單擊確定。
壓縮包中單個文件超過1 GB,可以采用NAS作為解壓臨時工作目錄。該方案可能會產生少量的NAS存儲費用。具體參見unzip-oss-nas。
不支持。
配置ZIP包解壓規則后,在OSS存儲空間上傳一個ZIP包,觸發一次函數計算解壓后傳回OSS指定目錄。如果解壓后的文件中依然包括ZIP包,則該ZIP包不能再次解壓。您可以將該ZIP包重新上傳到OSS存儲空間觸發解壓操作。
不可以。
ZIP包解壓功能僅支持將文件解壓到配置ZIP包解壓規則時設定的目標目錄中。如果需要解壓到另一個Bucket,需要基于函數代碼做二次開發,修改代碼。
可以。
使用ZIP包解壓功能時,函數計算邊解壓邊上傳文件到OSS,您可以隨時在目標目錄查看解壓后的文件。
您可以查看函數調用日志,判斷解壓是否完成。
在OSS控制臺的ZIP 包解壓頁面,單擊目標觸發器右側的編輯。
在彈出的函數詳情頁面下單擊調用日志頁簽。
單擊一鍵啟用。
為當前RAM角色授予AliyunLogFullAccess權限。具體操作,請參見為RAM角色授權。
上傳zip包文件,然后在函數日志頁簽查看調用日志。
以下記錄表明函數調用結束,可以說明解壓完成。
不支持。
ZIP包解壓功能目前只支持解壓.zip格式的文件。
沒有。
如果需要查看解壓進度,可以在函數計算詳情頁面的調用日志頁簽進行查看,或者給解壓函數配置異步調用目標服務。更多信息,請參見配置異步調用目標服務。
不支持。
如果需要將OSS上多個文件(Object)打包下載到本地,可以使用函數計算打包下載。更多信息,請參見使用函數計算實現打包下載OSS文件。
不支持。
ZIP包解壓功能只針對單個壓縮包,不支持將多個壓縮包解壓后的內容進行合并,因此大文件分卷壓縮成多個.zip壓縮包的情況不支持解壓。