A. 技術干貨 | 「選圖預覽並上傳」的場景如何解全網最全方案匯總來了
選擇本地相冊圖片或拍照,然後預覽並上傳,是移動應用中的常見場景。客戶反饋此類需求時,經常遇到上傳過程中的問題。為解決這一問題,我們提出了以下優化方案。
方案1:使用Android原生WebView
通過在前端使用標簽,調用Android原生Webview支持實現選擇文件上傳。然而,此方案存在局限性,WebView不支持直接選擇文件,需要自定義擴展WebChromeClient的openFileChooser或onShowFileChooser方法,以喚起系統文件選擇器。返回的URI格式多樣,需進行統一處理。
方案2:利用mPaaS的H5容器
業務使用mPaaS的H5容器後,內置了喚起文件選擇器的操作,但仍存在系統選擇器不可控的風險。部分客戶對於喚起後的文件選擇界面不滿意。
方案3:實現JSAPI喚起Native自定義選圖頁面
通過利用H5容器的自定義JSAPI功能,自定義一個選圖頁面,前端調用喚起Native界面。結果以Base64形式返回,解決了系統選擇文件的不可控問題。
然而,方案3存在返回Base64數據過大導致低端設備OOM問題和大量Base64轉JSON引發的ANR問題。
方案4:選圖返回本地路徑,WebView攔截訪問本地資源
為解決返回Base64數據穩定性問題,選圖後返回本地路徑,Native模塊攔截WebView訪問本地資源,實現本地圖片載入顯示。採用自定義域名進行資源攔截,解決了Base64傳遞問題。
文件上傳方案
在選圖方案基礎上,我們對比了各種上傳方案,沉澱了最佳實踐。上傳過程經歷了從使用RPC介面到使用OSS方案的轉變。
方案1:使用RPC介面上傳
通過mPaaS的RPC介面上傳文件,但遇到文件過大導致服務端報錯的穩定性問題,且對大文件上傳存在風險。
方案2:使用OSS方案上傳
推薦直接使用OSS方案上傳文件,OSS專門解決文件上傳場景,用戶集成對應的SDK即可實現本地文件上傳,適合解決各種文件上傳需求。