曾經遇到一個需求,用戶拍身份證上傳驗證,
然后我卡在了拍照這個點上。
最初采用的是微信的 api,wx.chooseImage,
但隨后發現,返回的是一種只有微信才能預覽的 url 格式,
但驗證是要放在 PC 上進行的,等於保存了這個 url 也沒法看呀。
然后詳細看了遍文檔,看上去好像是說可以先上傳到微信然后就可以下載到本地了,
於是又帶着吐槽啟用了另兩個微信 api,wx.uploadImage 和 wx.dowmloadImage。
萬萬沒想到,結局是,chooseImage 獲得 localIds 然后 uploadImage 得到 serverId,再 downloadImage 又變成了 localId。
思索了一下,也許這不是瀏覽器權限的問題,因此找上后端一起討論這個問題。
才知,downloadImage 得后台人員去下,具體原因他也沒說明白...
好吧,稀里糊塗算是走通了拍照和上傳驗證這個流程。
然而,正在我准備高興一下的時刻,對桌的同事跟我說,
剛才試了下,好像 input[type="file"] 好像在手機上相片選擇室會多一個拍照的按鈕。
然后我試了一下,天了嚕,心中有句 NMP 不知當講不當講,上面走微信 api 這條路又坑又麻煩好伐。
然而,正在我准備高興一下的時刻,又一個同事跟我說,
剛才試了下,好像我的手機不行耶,
然后集中試了一圈,確實有部分手機只有選取圖片沒有拍照這個選項,比如小米3/華為mate7等。
拔涼拔涼的,web 標准是多么重要呀...
所以該項目只得還是選用了微信 api 這種方法,
小小慶幸一下客戶群還好都是基於微信平台,不然還得改成 webapp 了。
而隨着時間流逝,
最近在 github 上尋找蘋果機兼容 getUserMedia 打開手機攝像頭(用於做個假 AR)的辦法。
一直無果所以向大佬匯報了一下,誰知之后他給我找來了一個 camera api。
試了一下,其實是個打開拍照功能,但這樣跳出了瀏覽器,沒法加東西弄成 AR 呀。
但猛然想到,說不定能解決上次那個部分手機沒法拍照的問題,就去看了下源碼。
不禁百臉懵逼,一切的一切只因為 accept="image/*" 這個屬性!
<input type="file"> <!-- 部分手機沒有拍照選項 --> <input type="file" accept="image/*"> <!-- 有了 -->
一時瞬間蒼老,不禁莞爾,感覺歲月弄人,可能這就是程序員的一生吧。
然而!這個故事還沒有完!!!
accept="image/*" 沒法使用 fileReader,
只能用 window.URL 的 createObjectURL,
也就意味着,它返回的是個 blob 類型的 url,沒法在其他頁面預覽了啊喂。
最后的最后,竟然還只能走微信 api 這條路了嗎,好不甘心呀,有待繼續尋找....
input 的案例
https://foreverz133.github.io/demos/single/input-file.html
微信的案例(當然你也只能在微信看到效果,代碼在 common.js 里面第 310 行左右)
http://goldcard.kdcer.com/User/BindingProcessStep2
好了,走了很多彎路,與大家同勉進步,么么噠