我想使用 AWS Lambda 代理整合透過我的 Amazon API Gateway REST API 或 HTTP API 傳回二進位資料。
解決方法
注意: API Gateway HTTP API 會自動處理二進位資料。對於 API Gateway REST API 要處理二進位資料,後端的 Lambda 函數必須使用 Lambda 函數的輸出格式來進行代理整合。
使用 Lambda 代理整合透過 API Gateway REST API 傳回二進位資料
請完成下列步驟:
- 開啟 Lambda console (Lambda 主控台)。
- 建立新的 Lambda 函數。
注意: 有關 Python 3 Lambda 函數的範例,請參閱在 API Gateway 中從 Lambda 代理整合返回二進位媒體。
- 開啟 API Gateway console (API Gateway 主控台)。
- 新建 REST API。
- 要為新的 API 創建 GET 方法,請執行下列動作:
在 Methods (方法) 面板中,選擇 Create method (建立方法)。
對於 Method type (方法類型),請選擇 GET。
在 / - GET - Setup (/ – GET – 設定) 區域中,針對 Integration type (整合類型) 選擇 Lambda function (Lambda 函數)。啟動 Use Lambda proxy integration (使用 Lambda 代理整合)。
對於 Lambda 函數,選擇您創建 Lambda 函數所在的 AWS 區域。然後,輸入新 Lambda 函數的名稱。
選擇 Create method (建立方法)。
- 對於 API,請選擇 API settings (設定)。
- 在 Binary media types (二進位媒體類型) 下,選擇 Manage media types (管理媒體類型),然後選擇 Add binary media type (新增二進位媒體類型)。
- 新增檔案格式,例如 image/png 或 application/pdf。
- 選擇 Save changes (儲存變更)。
- 將您的 API 部署至新階段。
注意: 有關如何設定新階段的資訊,請參閱請參閱在 API Gateway 中為 REST API 設置階段。
有關API 的詳細資訊,請參閱在 API 閘道中調用 REST API。
注意: 對於二進位資料,您必須在 Lambda 函數的輸出中,將 ;isBase64Encoded 屬性設定為 true。body 屬性也必須包含 base64 編碼的二進位媒體。如需詳細資訊,請參閱 API Gateway 中 REST API 的二進位媒體類型。
使用 Postman 或 cURL 調用 REST API 以返回二進位資料
重要: 對於 Postman 或 cURL,請在 API 請求中包含 Accept 標頭。Accept (接受) 標頭值必須與您正在使用的檔案格式相符,例如 image/png 或 application/pdf。
執行下列 curl 指令:
curl 'https://exampleRestApiId.execute-api.exampleRegion.amazonaws.com/exampleStageName/' -H 'Accept: image/png'
注意: 在上述指令中,將 exampleRestApiId 替換為您的 API 識別碼,並將 exampleRegion 替換為您的 API 所在的區域。另外,用您的 exampleStageName 替換為 API 階段名稱,並將 image/png 替換為您的圖片檔案類型。
使用 Web 瀏覽器調用您的 REST API 以返回二進位資料
Web 瀏覽器會自動傳送帶有多個值的 Accept (接受) 標頭。預設情況下,第一個值始終是 html/text。由於 API Gateway 僅遵循第一個值,因此您必須將 text/html 作為二進位媒體類型新增至 API。否則您會收到下列錯誤訊息:
「圖片 "https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/" 無法顯示,因為它包含錯誤。」
若要將 text/html 作為二進位媒體類型新增至 REST API 中,請執行下列操作:
- 開啟 API Gateway console (API Gateway 主控台)。
- 選擇您的 API。
- 在導覽窗格中,選擇 API settings (API 設定)。
- 在 Binary media types (二進位媒體類型) 下,選擇 Manage media types (管理媒體類型),然後選擇 Add binary media type (新增二進位媒體類型)。
- 輸入 text/html。
- 選擇 Save changes (儲存變更)。
- 部署您的 API。
如需詳細資訊,請參閱 API Gateway 中的內容類型轉換。