久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進行Serverless文件上傳優化

144次閱讀
沒有評論

共計 2730 個字符,預計需要花費 7 分鐘才能閱讀完成。

如何進行 Serverless 文件上傳優化,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

前言

當開發者需要搭建一個 Web 應用或移動端程序時,可以使用云函數作為后端服務,由 API 網關接收客戶端請求,并觸發云函數處理。這樣的 Serverless 架構具備簡單便捷、可彈性擴展、高可用等優勢,正成為越來越多人的共同選擇。

但開發者在搭建應用時,難免會遇到上傳文件的場景,如 App 上傳用戶頭像、個人博客文章圖片、網站評論圖片,這些都需要上傳文件到后端。如果您的業務托管在主機上,上傳文件往往不受限制,可使用 multipart/form-data 方式直接上傳文件;但在 Serverless 架構下,由于 API 網關和云函數之間只支持傳輸 JSON 數據,使用傳統方式上傳文件較為困難,一般的解決方案是由客戶端通過 Base64 等算法,先將文件從二進制轉換為字符后再進行上傳。

近期騰訊云 Serverless 團隊優化了上傳文件體驗,上線了 API 網關 Base64 編碼功能,上傳文件時原本由客戶端做的 Base64 編碼過程變為由 API 網關進行,這使得開發者無需改動客戶端代碼即可將二進制文件上傳至云函數 SCF。同時,前端開發中一般可基于 Base64 格式完成圖片的存儲和展現,使得該功能對前端開發者來說非常友好。

下面對 Serverless 和傳統方式 multipart 上傳多文件的過程進行了對比,并介紹了 Base64 編碼功能的配置方式。

請求過程對比傳統方式上傳文件過程

如果您的后端服務托管在云主機上,一般上傳文件的請求過程如下:

第一步:客戶端可直接使用 multipart/form-data 方式上傳文件;

第二步:在后端服務中獲取二進制文件。

以下是一段客戶端上傳兩張圖片 pic-1.jpg 和 pic-2.jpg 到后端服務的 Python 3 參考代碼:

import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
from requests_toolbelt.multipart import decoder
 
m = MultipartEncoder(
 fields=[ ( files[] ,(file.jpg , open( pic-2.jpg ,  rb),  image/jpeg )),
 (files[] ,(file2.jpg , open( pic-1.jpg ,  rb),  image/jpeg )),
 ]
 )
res = requests.post(url= https://yourwebsite.com/upload ,
 data=m,
 headers={Content-Type : m.content_type})
json = res.json()
print(json)

Serverless 上傳文件過程

如圖是采用 API 網關結合云函數,開啟 Base64 功能后上傳文件的請求過程:

客戶端可直接使用 multipart/form-data 方式上傳文件;

在云函數中獲取經過 Base64 編碼的文本。

對比結論

通過以上兩種方式的對比,我們不難看出,Base64 編碼功能的最大優勢在于使 Serverless 獲得了和傳統方式完全一致的上傳文件體驗,可直接使用傳統方式的客戶端代碼進行上傳。

另外,在云函數中獲取了經過 Base64 編碼的文本后,您只需對 event.body 進行解碼,就可以得到二進制文件了。以下是一段在云函數中解碼多文件的 Python 3 參考代碼:

# -*- coding: utf-8 -*-
import sys
import logging
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
from requests_toolbelt.multipart import decoder
import base64
import json
print(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 觸發】。單擊【添加觸發規則】,選擇參數并填寫參數值。

確認配置信息無誤后,最后單擊【保存】即可。

關于如何進行 Serverless 文件上傳優化問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注丸趣 TV 行業資訊頻道了解更多相關知識。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計2730字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 思茅市| 福安市| 阜宁县| 莲花县| 罗田县| 宁夏| 富民县| 高邑县| 西宁市| 定兴县| 岳池县| 青阳县| 大埔县| 奉贤区| 贡嘎县| 兰考县| 凤翔县| 进贤县| 封丘县| 和硕县| 庄河市| 崇州市| 天津市| 进贤县| 龙井市| 广丰县| 英德市| 易门县| 历史| 新竹市| 浦东新区| 尚志市| 沽源县| 新河县| 北辰区| 中牟县| 登封市| 高尔夫| 安徽省| 兴仁县| 灵川县|