全部產品
Search
文件中心

Object Storage Service:ZIP包解壓

更新時間:Sep 06, 2024

當您需要批量上傳檔案、按特定目錄結構上傳檔案、上傳完整的檔案或對檔案快速進行資源分發時,可以配置解壓規則,上傳ZIP檔案到OSS指定路徑,觸發Function Compute自動解壓,並將解壓後內容儲存回OSS。

前提條件

已開通Function Compute服務。您可以在Function Compute的產品詳情頁面開通Function Compute服務。

使用情境

  • 批量上傳:當您有大量小檔案需要上傳時,使用程式上傳耗時較多,此時可以使用ZIP包解壓功能,將檔案打包上傳。

  • 上傳完整的檔案:出於資源完整性考慮,有時需要將多個檔案組合成一個資源,而將多個檔案分別上傳可能成功率不高,此時可以使用ZIP包解壓功能,提升上傳成功率。

  • 按特定目錄結構上傳:網站中引用了很多靜態資源,資源的目錄結構比較複雜,如果在OSS中逐一建立目錄上傳檔案的話耗時很長。此時可以在本地定義ZIP包中目錄結構,壓縮後上傳到OSS,使用ZIP包解壓功能解壓使用。

  • 資源分發:在需要將大量檔案分發給使用者或不同伺服器時,可以將這些檔案打包成ZIP包,並使用OSS ZIP包解壓功能將ZIP包解壓到指定目錄。這樣可以減少傳輸時間和頻寬消耗。

實現原理

ZIP包解壓結合Function Compute完成ZIP檔案的解壓工作,解壓流程如下圖所示。

  1. “匹配解壓規則尾碼”的ZIP檔案上傳到“滿足OSS解壓規則首碼”的目錄。

  2. 自動觸發Function Compute。

    配置ZIP包解壓規則時需要觸發器授權,以便OSS使用觸發器角色AliyunOSSEventNotificationRole調用Function Compute,觸發器授權時自動為該角色授予調用Function Compute的權限原則。

  3. Function Compute解壓ZIP檔案,並將解壓後的檔案儲存體至OSS的指定目錄中。

    配置ZIP包解壓規則時需要給Function Compute服務授權。授權時將建立角色,Function Compute使用角色擷取OSS上的ZIP包,並將解壓後的檔案儲存回OSS。建立角色時會同步授予角色相應的權限原則(對OSS Bucket的讀寫權限)。

費用說明

ZIP包解壓功能是增值服務,將產生OSS和Function Compute相關費用:

  • OSS:請求Bucket的資源的請求數計費和儲存費用。更多資訊,請參見OSS計費概述

  • Function Compute:vCPU使用量費用和記憶體使用量量費用,按執行時間計費。例如:ZIP包解壓執行了5分鐘,vCPU是2核,記憶體是3GB,計費為2*0.000015*300+3*0.0000015*300=0.01035美元。更多資訊,請參見FC計費概述

Bucket資源和Function Compute資源通過Bucket的內網網域名稱進行傳輸,內網網域名稱傳輸資料免流量費用。

使用限制

  • 地區限制:僅華東1(杭州)、華東2(上海)、華北1(青島)、華北2(北京)、華北 3(張家口)、華北5(呼和浩特)、華南1(深圳)、西南1(成都)、中國香港、新加坡、澳大利亞(雪梨)、馬來西亞(吉隆坡)、印尼(雅加達)、日本(東京)、德國(法蘭克福)、英國(倫敦)、美國(維吉尼亞)、美國(矽谷)、沙特(利雅得)地區的儲存空間支援ZIP包解壓。

  • 儲存類型限制:冷歸檔儲存類型的檔案需先解凍再解壓;Archive Storage類型的檔案,如果所在Bucket未開啟歸檔直讀,需先解凍再解壓。

  • 檔案或檔案夾命名限制:建議使用UTF-8或GB 2312編碼命名您的檔案或檔案夾,否則可能會出現解壓後的檔案或檔案夾名稱出現亂碼、解壓過程中斷等問題。

  • 壓縮包限制:ZIP壓縮包中單個檔案的大小不超過1 GB,解壓單個壓縮包預設的最大時間是2小時,超過2小時可以調整函數最大執行時間長度,詳情請參見解壓超大檔案解壓超過2h任務失敗

配置ZIP包解壓規則

  1. 登入OSS管理主控台

  2. 單擊Bucket 列表,然後單擊目標Bucket名稱。

  3. 在左側導覽列,選擇數據處理 > ZIP 包解壓

  4. 單擊ZIP 包解壓,在ZIP 包解壓面板配置ZIP包解壓規則。

    參數說明

    參數

    是否必選

    說明

    服務授權

    授予Function Compute讀寫OSS和執行函數的許可權。

    單擊授權按鈕,然後按照提示完成授權。

    觸發器授權

    授予OSS訪問Function Compute的許可權。

    單擊授權按鈕,然後按照提示完成授權。如果已完成授權,此項顯示為觸發器角色

    首碼

    配置觸發Function Compute的檔案首碼。您上傳指定首碼的ZIP檔案或將ZIP檔案上傳至指定目錄會觸發Function Compute。置空此項則匹配所有上傳的ZIP檔案。

    重要

    置空此項可能會觸發迴圈執行,建議您設定檔首碼。更多資訊,請參見如何避免迴圈觸發?

    目標目錄

    填寫ZIP檔案解壓後存放的目錄。置空此項,Function Compute會將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          └─── ...
  5. 選中我已知曉並同意開通Function Compute,通過Function Compute處理壓縮檔。壓縮檔裡面的檔案名稱或檔案夾名不支援非UTF-8或GB 2312編碼後,單擊確定

修改ZIP包解壓配置

您可以根據自己的需求修改ZIP包解壓的配置。

修改觸發Function Compute的檔案首碼

  1. 在OSS控制台的ZIP 包解壓頁面,單擊目標觸發器右側的編輯

  2. 在彈出的函數詳情頁面下的觸發器管理頁簽,單擊目標觸發器右側的編輯

  3. 編輯觸發器對話方塊,修改檔案首碼,其他參數保持預設配置。

  4. 單擊確定

修改Function Compute配置

  1. 在Function Compute控制台的函數詳情頁面下的函數配置頁簽,單擊目標觸發器右側的編輯

  2. 根據實際需求,修改Function Compute相關配置,例如函數執行記憶體、執行逾時時間等。

    具體操作,請參見管理函數

刪除觸發器

說明

刪除後無法恢複,且不能繼續使用當前觸發器觸發函數。執行中的任務會繼續進行。

  1. 在函數詳情頁面下的觸發器管理頁簽,單擊目標觸發器右側的刪除

  2. 在彈出的對話方塊,單擊刪除

相關文檔

使用Function Compute實現打包下載OSS檔案

常見問題

上傳檔案後觸發Function Compute失敗

ZIP包解壓涉及OSS與Function Compute服務的關聯調用。ZIP檔案上傳到OSS後,OSS觸發Function Compute執行解壓操作。OSS觸發Function Compute的調用可能失敗,您可以在響應Header中通過x-oss-event-status的值(Base64編碼)判斷是否成功觸發解壓。如果x-oss-event-status的值解碼後為{"Result": "Ok"},表示成功觸發解壓。如果x-oss-event-status的值解碼後不為{"Result": "Ok"},表示觸發解壓失敗,建議重新上傳ZIP檔案。具體操作,請參見簡單上傳

說明

ZIP壓縮包中單個檔案的大小不超過1 GB,解壓單個壓縮包的最大時間是2小時。

解壓超大檔案解壓超過2h任務失敗

函數預設最大執行時間是2h,配置ZIP包解壓規則後可以在Function Compute控制台修改時間,最大支援24h。

  1. 在OSS控制台的ZIP 包解壓頁面,單擊目標觸發器右側的編輯

  2. 在彈出的函數詳情頁面下單擊函數配置頁簽。

  3. 單擊環境資訊右側的編輯

  4. 修改執行逾時時間,然後單擊確定

壓縮包中單個檔案超過1 GB

壓縮包中單個檔案超過1 GB,可以採用NAS作為解壓臨時工作目錄。該方案可能會產生少量的NAS儲存費用。具體參見unzip-oss-nas

是否支援嵌套的ZIP包解壓

不支援。

配置ZIP包解壓規則後,在OSS儲存空間上傳一個ZIP包,觸發一次Function Compute解壓後傳回OSS指定目錄。如果解壓後的檔案中依然包括ZIP包,則該ZIP包不能再次解壓。您可以將該ZIP包重新上傳到OSS儲存空間觸發解壓操作。

通過FC解壓後的檔案,能不能解壓到另一個Bucket

不可以。

ZIP包解壓功能僅支援將檔案解壓到配置ZIP包解壓規則時設定的目標目錄中。如果需要解壓到另一個Bucket,需要基於函數代碼做二次開發,修改代碼。

解壓過程中隨時可以看到OSS目錄的檔案麼

可以。

使用ZIP包解壓功能時,Function Compute邊解壓邊上傳檔案到OSS,您可以隨時在目標目錄查看解壓後的檔案。

怎麼判斷已經解壓完成

您可以查看函數調用日誌,判斷解壓是否完成。

  1. 在OSS控制台的ZIP 包解壓頁面,單擊目標觸發器右側的編輯

  2. 在彈出的函數詳情頁面下單擊調用日誌頁簽。

  3. 單擊一鍵啟用

  4. 為當前RAM角色授予AliyunLogFullAccess許可權。具體操作,請參見為RAM角色授權

  5. 上傳zip包檔案,然後在函數日誌頁簽查看調用日誌。

    以下記錄表明函數調用結束,可以說明解壓完成。

    image.png

是否支援解壓.rar和.tar.gz格式的檔案

不支援。

ZIP包解壓功能目前只支援解壓.zip格式的檔案。

ZIP包解壓完畢後會返回資訊給OSS麼

沒有。

如果需要查看解壓進度,可以在Function Compute詳情頁面的調用日誌頁簽進行查看,或者給解壓函數配置非同步呼叫目標服務。更多資訊,請參見配置非同步呼叫目標服務

OSS是否支援在線壓縮

不支援。

如果需要將OSS上多個檔案(Object)打包下載到本地,可以使用Function Compute打包下載。更多資訊,請參見使用Function Compute實現打包下載OSS檔案

是否支援分卷壓縮

不支援。

ZIP包解壓功能只針對單個壓縮包,不支援將多個壓縮包解壓後的內容進行合并,因此大檔案分卷壓縮成多個.zip壓縮包的情況不支援解壓。

ZIP包解壓按鈕為灰色,無法配置ZIP包解壓規則

  • 確保Function Compute服務已開通。您可以在Function Compute的產品詳情頁面開通Function Compute服務。

  • 只特定地區支援ZIP包解壓。更多資訊,請參見使用限制