請求過程對比傳統方式上傳檔案過程
如果您的後端服務託管在雲主機上,一般上傳檔案的請求過程如下:
第一步:客戶端可直接使用 multipart/form-data 方式上傳檔案;第二步:在後端服務中獲取二進位制檔案。以下是一段客戶端上傳兩張圖片 pic-1.jpg 和 pic-2.jpg 到後端服務的 Python 3 參考程式碼:
如圖是採用 API 閘道器結合雲函式,開啟 Base64 功能後上傳檔案的請求過程:
另外,在雲函式中獲取了經過 Base64 編碼的文字後,您只需對 event.body 進行解碼,就可以得到二進位制檔案了。以下是一段在雲函式中解碼多檔案的 Python 3 參考程式碼:
# -*- coding: utf-8 -*-import sysimport loggingimport requestsfrom requests_toolbelt.multipart.encoder import MultipartEncoderfrom requests_toolbelt.multipart import decoderimport base64import jsonprint('Loading function')logger = logging.getLogger()def main_handler(event, context): logger.info("start main handler") content_type_header = event['headers']['content-type'] body = event['body'] is_me = base64.b64decode(body) for part in decoder.MultipartDecoder(is_me, content_type_header).parts: print(part.content)
注意:需要使用層或上傳 zip 包的形式安裝相關依賴。
實戰配置為滿足不同場景的要求,Base64 編碼功能還提供了“全部觸發”和“Header 觸發”兩種觸發方式供您選擇:
全部觸發:API 開啟全部觸發後,每次請求的請求內容都會被 Base64 編碼後再傳遞給雲函式。Header 觸發:API 開啟 Header 觸發後,必須配置觸發規則。API 閘道器將根據觸發規則對請求頭進行校驗,只有擁有特定 Content-Type 或 Accept 請求頭的請求會被 Base64 編碼後再傳遞給雲函式,不滿足條件的請求將不進行 Base64 編碼,直接傳遞給雲函式。以下將分別敘述兩種觸發方式的配置過程:
配置全部觸發登入 API 閘道器控制檯 ,在左側導航欄單擊【服務】。在服務列表中,單擊目標服務的服務 ID,檢視 API 列表。單擊【新建】,填寫 API 前端配置,單擊【下一步】。API 後端型別選擇【雲函式SCF】,勾選“Base64編碼”,完成後續配置流程。此時建立的 API 已經開啟了 Base64 編碼,並預設為“全部觸發”。配置 Header 觸發登入 API 閘道器控制檯 ,在左側導航欄單擊【服務】。在服務列表中,單擊目標服務的服務 ID,檢視 API 列表。在 API 列表中,單擊目標 API 的 API ID(目標 API 必須是後端對接 SCF 的 API),即可檢視 API 詳情頁。 在 API 詳情頁中,單擊【基礎配置】標籤頁,找到【Base64編碼】配置項。單擊"Base64"後的【編輯】,選擇觸發方式為【Header觸發】。單擊【新增觸發規則】,選擇引數並填寫引數值。確認配置資訊無誤後,最後單擊【儲存】即可。