全部產品
Search
文件中心

Object Storage Service:使用Function Compute實現打包下載OSS檔案

更新時間:Sep 15, 2024

Object Storage Service支援Function Compute服務,您可以藉助Function Compute快速構建任何類型的應用和函數,本文將介紹如何使用Function Compute將Object Storage Service上多個檔案(Object)打包下載到本地。

前提條件

方案概述

當您從OSS中批量下載Object時可能會遇到批量下載不方便、小檔案較多時下載緩慢等問題。通過調用Function Compute,可以將OSS上的Object先打包,然後將壓縮包下載到本地後再解壓,實現快速下載批量檔案的目的。使用Function Compute打包下載OSS檔案的工作流程如下圖所示。壓縮OSS檔案

  1. 使用者調用函數,並指定儲存空間及待壓縮的檔案。

  2. Function Compute從OSS中下載指定檔案,並產生一個隨機名稱的ZIP壓縮包。

  3. Function Compute將壓縮包上傳至OSS。

  4. Function Compute將ZIP包的下載地址返回給使用者。

  5. 使用者使用返回的長期有效下載地址從OSS中下載檔案。

使用說明

  • 函數運行環境的磁碟空間是有限的,所以採用流式下載和上傳的方式,只在記憶體中緩衝少量的資料。

  • 為了加快速度,Function Compute在產生ZIP檔案的同時將檔案上傳到OSS。

  • 上傳ZIP檔案到OSS時,利用OSS分區上傳的特性,多線程並發上傳。

  • 使用Function Compute壓縮檔時,最大處理時間是24小時(實驗資料為57個檔案,總大小1.06 GB,處理時間為63s)。

操作步驟

以下以通過Function Compute將華東1(杭州)地區examplebucket中dir/目錄下的多個檔案打包下載到本地為例。

  1. 部署應用並擷取對外公網網域名稱。

    使用Resource Orchestration Service一鍵部署

    您可以使用Resource Orchestration Service一鍵配置部署Function Compute應用,並擷取對外公網網域名稱。使用Resource Orchestration Service快速部署Function Compute應用,並擷取對外公網網域名稱的操作步驟如下。

    1. 開啟一鍵配置模板連結

    2. 配置參數頁簽,所有參數保留預設配置,單擊下一步

    3. 檢查並確認頁簽,單擊建立

      資源棧的資源棧資訊頁簽下的狀態顯示建立中

    4. 資源棧的狀態顯示建立成功後,單擊輸出頁簽,查看對外公網網域名稱。

    使用Serverless應用中心一鍵部署

    1. 通過Serverless應用中心一鍵部署應用模板start-zip-oss。

      其中,部署類型選擇直接部署,應用模板所在地區與Bucket所在地區保持一致,其他選項保留預設配置。配置詳情如下圖所示。1

    2. 擷取對外公網網域名稱。

      1. 單擊結果頁簽。

      2. 在triggers欄位擷取對外公網網域名稱(urlInternet)。

        2

    使用Serverless Devs命令列工具手動部署

    1. 安裝Serverless Devs。

      curl -o- -L http://cli.so/install.sh | bash

      驗證是否安裝成功。

      s -v

      成功安裝後的執行結果:

      @serverless-devs/s: 2.1.1, s-home: /root/.s, linux-x64, node-v14.19.3
    2. 配置Serverless Devs。

      s config add --AccessKeyID LTAI******** --AccessKeySecret  KZo1******** --access fc-access

      參數說明如下:

      參數

      說明

      --AccessKeyID

      訪問Function Compute服務的AccessKey ID。

      --AccessKeySecret

      訪問Function Compute服務的AccessKey Secret。

      --Access

      自訂密鑰別名。

    3. 部署應用模板start-zip-oss。

      1. 初始化專案。

      2. s init start-zip-oss -d start-zip-oss
      3. 參考以下樣本值完成各個配置項。

      4. 配置項

        樣本值

        應用所在的地區

        cn-hangzhou

        應用所屬的Function Compute服務

        start-zip-oss

        應用的函數名稱

        zip-oss-func

        應用所屬的Function Compute服務配置的RAM角色ARN

        acs:ram::137918634953****:role/test-role

      5. 進入專案。

      6. cd start-zip-oss
      7. 部署專案。

      8. s deploy -y
      9. 記錄輸出結果中返回的system_url。

      10. fc-zip-oss-service:
          region:   cn-hangzhou
          service:
            name: start-zip-oss
          function:
            name:       zip-oss-func
            runtime:    python2.7
            handler:    main.main_handler
            memorySize: 3072
            timeout:    1800
          url:
            system_url: https://zip-oss-func-start-zip-oss-ayouye****.cn-hangzhou.fcapp.run
          triggers:
            -
              type: http
              name: http-test
  2. 在您自己的伺服器或阿里雲ECS上執行以下命令產生event.json檔案,並在檔案中指定Bucket名稱以及待下載的檔案所在目錄。

    cat <<EOF > event.json
    {
      "bucket": "examplebucket",
      "source-dir": "dir/"
    }
    EOF
    說明

    source-dir僅支援指定為Bucket下的某個目錄,不支援指定為Bucket根目錄。

  3. 請求樣本如下。

    curl -v -L -o  oss.zip -d @./event.json https://zip-oss-func-zip-oss-ayouye****.cn-hangzhou.fcapp.run
    • /test/oss.zip:用於存放dir/目錄下所有檔案的本地路徑。

    • https://zip-oss-func-zip-oss-ayouye****.cn-hangzhou.fcapp.run:部署專案時返回的system_url。

    說明

    如果您需要將以上樣本中的匿名非鑒權HTTP函數修改為鑒權HTTP函數,您可以通過以下任意一種語言的SDK進行調用:

常見問題

是否支援通過Function Compute打包下載檔案時對檔案添加浮水印?

不支援。您可以通過以下方式對儲存在OSS中檔案增加浮水印文字或浮水印圖片:

  • 對於公用讀取或者公用讀寫許可權的檔案

    在檔案URL中添加浮水印參數。具體操作,請參見圖片浮水印

  • 對私人許可權的檔案

    在SDK中添加圖片處理參數或圖片樣式參數的方式添加浮水印。具體操作,請參見使用SDK處理圖片

通過Function Compute打包下載檔案時是否支援產生帶有時效性的檔案下載地址?

不支援。如果您希望檔案URL包含到期時間,您需要在URL中攜帶Expires參數。具體操作,請參見使用檔案URL

更多參考