當前位置:首頁 » 文件管理 » ioswebview圖片上傳

ioswebview圖片上傳

發布時間: 2023-09-24 11:35:47

上傳圖片並預覽的網頁代碼在瀏覽器可以,但是在android的webview上不行

出現這個問題大多都是因為路徑不對

把你的圖片放進你要上傳的那個文件裡面,在從新增加這個張圖片就行了

上傳到空間有時會丟失銜接或圖片,你可以把丟失的那個HTML文件在空間刪了在從新上傳就可以了,記得把圖片也一同上傳

檢查一下路徑
你建站的文件在E:\1,那麼你的圖片途徑必須是E:\1\***.gif或***.JPGE等

㈡ H5調用本地相冊/相機上傳圖片

在開發中有時候會用到H5調用本地圖片粗伏或者相機,像第三方的實名認證,在線客服等蔽凳檔等都需要上宏亂傳圖片。H5中只需要通過 <input> 調用即可,ios是可以的實現的,不需要自己處理,除非客戶端壓縮圖片,但是Android中需要自己處理,比較坑,本文記錄H5調用本地圖片或者相機的實現過程以及遇到的問題。

H5主要是通過 input 標簽來獲取圖片

通過 WebView 載入 h5 頁面,監聽 WebView 對應的方法,實現自己的邏輯。

當點擊 input 標簽的時候會調用 WebChromeClient 的 onShowFileChooser() 方法(5.0+)或者 openFileChooser() 方法(3.0+)在改方法中處理自己邏輯,這里是彈出一個原生的選擇框,選擇從相冊還是拍照獲取圖片。

拍照和打開相冊功能封裝到了 PhotoUtils 工具類中了。

file_paths.xml

從相冊中選擇

onActivityResult() 方法處理

這里使用 Luban 壓縮以後再上傳的

㈢ 圖片拍照上傳解決方案

微信內置瀏覽器,和一些主流瀏覽器支持調用攝像頭,但也有很多不支持調用攝像頭,僅支持相冊。
如果是WebView中,就需要客戶端支持了,android和ios的許可權也是問題。

formData 簡介

簡單的說就是:通過formData,我們可以用ajax方式來發送表單數據;以前上傳圖片是需要用form表單提交的。

我們知道瀏覽器默認顯示的文件上傳按鈕是很醜的,通常UI都會對上傳按鈕進行設計。有以下幾種方案來寫樣式。

弊端:

通過ref獲取上傳按鈕。

ref方式

event.target方式

坑:

FileReader 簡介

通過 readAsDataURL() ,在讀取操作完成後,result屬性中將包含一個data:URL格式的字元串以表示所讀取文件的內容。

base64字元串

兼容性

我在safari中測試,發現是支持的。

URL.createObjectURL 簡介

通過URL.createObjectURL()創建一個URL對象,這個URL對象表示指定的file對象或Blob對象。

兼容性

張鑫旭的文章: HTML5 file API加canvas實現圖片前端JS壓縮並上傳

張鑫旭的文章: 理解DOMString、Document、FormData、Blob、File、ArrayBuffer數據類型

使用Camera API
張鑫旭

㈣ iOS WKWebView與H5交互,JS調OC傳值、OC調JS傳值、進度條載入等(干貨滿滿)

WKWebView是蘋果在iOS 8之後推出的框架,關於它比webview的優勢這里就不講了。主要說一下與JS交互的問題,其實WKWebView已經內置了JS與OC的互調、傳值等方法,使用起來也非常方便,下面就來細細的探討一下以及自己遇到過的坑...

首先來看下WKWebView的初始化相關設置:

一、導入相關頭文件、設置相關代理和屬性

二、WKWebView初始化

注意:
樓主遇到的第一個坑:如果JS給OC傳值為空,必須寫成: postMessage(null),如果什麼都不寫,方法是調不通的。

1、在viewWillAppear中配置, addScriptMessageHandler name: "這里就是JS的方法,方法名必須統一"

樓主遇到的第二個坑:配置完後必須在 viewWillDisappear 中 remove,否則會造成循環引用,導致crash

2、實現 WKScriptMessageHandler 協議

以上就是JS調OC,JS向OC傳值...

樓主這里舉三個例子:
1: webview載入完成前,將用戶信息傳給js
2: webview載入完成,將相關信息傳給js
3: 調用相冊或相機時,將選擇的圖片請求後台介面,後台返回圖片地址,將該地址回傳給H5,H5將圖片顯示到頁面上

第一個例子: webView載入完成前傳值
因為 evaluateJavaScript 方法默認是在載入完成後調用,所以直接在頁面開始載入中調用是傳不過去的,這個時候怎麼辦呢? 我們可以讓js端寫兩個方法, 第一個方法是js端開始向oc端發起信息需求的方法名,當oc端收到該方法名的時候,就去調用js端第二個獲取傳值的方法,把信息傳遞過去。

先讓JS端寫個方法調OC,OC實現方法後在這個方法內部給JS傳值

在WKScriptMessageHandler協議中,實現該方法,然後在方法內部給JS傳值

注意: 以上就是在Webview載入完成前傳值,如果列印沒報錯,證明傳參成功,如果web端沒收到,讓他把獲取到值的方法寫到頁面中即可。

第二個例子: webView載入完成,傳值給js

第三個例子: 傳圖片地址給js,js拿到後顯示圖片

1:拍照事件

1.1:將拍的照片請求上傳圖片介面,成功返回圖片地址,並傳值給H5

2: 從相冊中選取照片

2.2:將相冊中選取的照片請求上傳圖片介面,成功返回圖片地址,並傳值給H5

注意: getPhotoCallback 即為調用的方法名,後面傳值格式必須為: ('') , 這里遇到了第三個坑, 如果方法名寫為: 名稱.名稱 (例如:hello. getPhotoCallback),這種是調不通的,可以寫成hello_getPhotoCallback的形式,一般的話最好還是定義一個完整的名稱。 剛開始這個問題卡了比較久,一直調不通,在此記錄一下.....

在 viewDidLoad 中注冊進度條監聽

開始載入網頁

載入完成

載入失敗

頁面跳轉失敗

progressView懶載入

添加監聽觀察者

最後別忘記 removeObserver

Demo地址: https://github.com/zhwIdea/WKWebViewAndJS

熱點內容
安卓車載視頻如何刪除軟體 發布:2025-01-24 02:54:22 瀏覽:616
伺服器暫時無法運行是什麼意思 發布:2025-01-24 02:45:59 瀏覽:146
配置最高的千元機哪個好 發布:2025-01-24 02:38:49 瀏覽:239
如何破解軟體登錄不了伺服器 發布:2025-01-24 02:05:07 瀏覽:14
春節三新演算法 發布:2025-01-24 02:03:22 瀏覽:20
我的世界伺服器房間號2020電腦版 發布:2025-01-24 01:28:05 瀏覽:401
微信提示存儲空間不足 發布:2025-01-24 01:19:53 瀏覽:966
安卓電腦管家如何清除緩存 發布:2025-01-24 00:55:42 瀏覽:150
怎麼上傳歌曲到qq音樂 發布:2025-01-24 00:45:30 瀏覽:67
養貓用什麼配置 發布:2025-01-24 00:37:58 瀏覽:814