當您需要從Object Storage Service中批量下載多個檔案時,可能會遇到批量下載不方便、小檔案較多等情況。 您可以通過Function Compute將Object Storage Service中的多個檔案打包下載至本地,既可以節約時間又可以節省流量和相關費用。
流程及實現細節
流程圖
使用Function Compute在Object Storage Service中同時下載多個檔案的流程圖如下:
按需調用函數,指定儲存空間及待壓縮檔。
調用函數後,Function Compute從Object Storage Service中下載目標檔案並壓縮成ZIP包。
Function Compute將ZIP包上傳到Object Storage Service中。
Function Compute將給您返回目標ZIP檔案在Object Storage Service中的地址。
您可以通過步驟4返回的地址下載目標檔案。
實現細節
使用這種調用方式有以下優勢:
函數運行環境的磁碟空間是有限的,採用流式下載和上傳的方式,在記憶體中只緩衝少量資料。
上傳ZIP檔案到Object Storage Service時,利用Object Storage Service分區上傳的特性,將分區以隊列的形式多線程並發上傳。
前提條件
已開通Function Compute服務。具體操作,請參見開通Function Compute服務。
已開通OSS服務並在OSS建立儲存空間。具體操作,請參見開通OSS服務並建立儲存空間。
已安裝並配置Serverless Devs。具體操作,請參見快速入門。
操作步驟
執行以下命令,初始化專案。
sudo s init start-zip-oss-v3 -d start-zip-oss-v3根據介面提示,依次選擇地區,設定函數名稱並輸入函數的RAM角色。
執行以下命令,進入專案,並進行專案部署。
cd start-zip-oss-v3 && s deploy - y部署成功後,輸出樣本如下。記錄返回的
system_url,用於調用函數時使用。region: cn-hangzhou description: functionArn: acs:fc:cn-hangzhou:1034354682****:functions/zip-oss-func-2m1d functionName: zip-oss-func-jbip handler: main.main_handler internetAccess: true memorySize: 3072 role: acs:ram::1034354682****:role/aliyunfcdefaultrole runtime: python3.9 timeout: 1800 triggers: - description: qualifier: LATEST triggerConfig: methods: - GET - POST - PUT authType: anonymous disableURLInternet: false triggerName: http-test triggerType: http url: system_url: https://zip-ossunc-jbip-gvdzx****.cn-hangzhou.fcapp.run system_intranet_url: https://zip-ossunc-jbip-gvdzx****.cn-hangzhou-vpc.fcapp.run __component: fc3應用部署成功後,調用部署好的函數下載多個檔案。
在
start-zip-oss-v3目錄下建立event.json檔案,並在檔案中指定Bucket名稱、待下載的檔案所在的目錄或指定待下載檔案名稱列表。通過
source-dir指定要下載的檔案所在的目錄。{ "bucket": "bucketname", "source-dir": "filepath/" }通過
source-files指定要下載的檔案清單。{ "bucket": "bucketname", "source-files": ["files1.txt","filepath/files2.txt"] }
使用curl命令直接調用函數。
說明請將命令樣本中的訪問地址更新為您部署應用成功後返回的公網訪問地址
system_url。curl -v -L -o /tmp/my.zip -d @./event.json https://zip-oss-func-zip-oss-****.cn-hangzhou.fcapp.run調用成功後,您可以在
/tmp檔案夾中查看到下載的壓縮檔my.zip。同時登入Object Storage Service控制台,在對應Bucket的output目錄也可以看到下載的壓縮檔。
實驗資料
情境 | 檔案數 | 壓縮前總大小 | 壓縮後總大小 | 執行時間 |
1 | 7 | 1.2 MB | 1.16 MB | 0.4s |
2 | 57 | 1.06 GB | 0.91 GB | 63s |
您可以通過以上表格擷取以下兩個資訊:
情境1說明使用Function Compute實現多個檔案的下載,可以減少檔案的儲存空間。
情境2說明使用Function Compute實現多個檔案的下載,可以在短時間內下載大量檔案。
相關文檔
如果您需要解壓上傳到OSS的ZIP檔案,可以在Function Compute部署函數實現ZIP檔案自動解壓,也可以直接在OSS配置ZIP檔案自動解壓,具體請參見使用Function Compute實現自動解壓上傳到OSS的ZIP檔案和ZIP包解壓。