在小程序開發的過程當中,若是你的小程序中存在圖片上傳的能力,常常會遇到同一個緣由被拒絕審覈:「沒有對上傳信息作審覈」,想要過審覈也很簡單,只要將用戶上傳的圖片提交審覈就能夠了。並且,微信也提供了這樣的接口給開發者,讓開發者作接入。若是你使用了雲開發,那就更加的簡單,只須要使用雲調用,一行代碼就能夠完成產品的調用。javascript
很多人看過一個視頻,裏面的代碼大體是這樣寫的,很簡單,但頗有效的完成了圖片的安全檢測前端
// 雲函數入口文件 const cloud = require('wx-server-sdk') cloud.init() // 雲函數入口函數 exports.main = async (event, context) => { const img = (await cloud.downloadFile({ fileID:event.fileID })).fileContent; return await cloud.openapi.security.imgSecCheck({ media:{ contentType:'image/png', value:img } }); }
這段代碼在絕大多數狀況下都是不會出現運行問題的,可是,這個大多數狀況是指這個圖片沒有安全問題,若是這個圖片的內容有問題,你的小程序運行就會報錯,就像下面這樣。java
這樣的報錯有問題麼?沒有的,由於這個就是系統的運行機制,可是,這樣的問題若是不作處理,就會在實際應用過程當中出現問題。數據庫
這段報錯的意思是:因爲檢測的內容出現了問題,致使系統出現了異常,從未拋出了一個異常,在這種狀況下,開發者須要作的就是捕獲這個異常。在 JavaScript 中,咱們只須要在咱們的項目中加入 try...catch...
就能夠處理了。小程序
加入 try...catch...
後,咱們獲得的代碼是這樣的api
// 雲函數入口文件 const cloud = require('wx-server-sdk') cloud.init() // 雲函數入口函數 exports.main = async (event, context) => { const img = (await cloud.downloadFile({ fileID:event.fileID })).fileContent; try { await cloud.openapi.security.imgSecCheck({ media:{ contentType:'image/png', value:img } }); return { code: 0, msg: "ok" } } catch (err) { return { code: 1, msg: err } } }
這段代碼會在圖片沒有問題的時候回覆一個 { "code": 0, "code":"ok"}
,若是圖片有問題的話,就會返回 {"code":1,"msg":"錯誤的緣由"}
。安全
在這種狀況下,你只須要在雲函數的返回值中獲取到 code ,若是等於 0 ,就說明用戶上傳的圖片經過審覈。若是返回 1 ,則說明用戶的圖片沒有經過審覈。微信
前面的內容介紹瞭如何開發出一個圖片安全校驗的雲函數,接下來,咱們來看看如何在業務系統中接入這個功能。async
實際上,咱們有兩種方式在業務系統中實現圖片安全校驗,一種是前置校驗,一種是後置校驗。函數
前置校驗是指用戶所提交的數據尚未提交到數據庫前對圖片進行校驗,若是圖片不合格,就不容許圖片提交到數據庫中。
後置校驗則是指用戶所提交的數據先提交到數據庫中,並標記爲審覈中狀態, 後續經過審覈再修改狀態爲經過,從而讓用戶提交的內容在前臺可見。
通常而言,推薦你們使用前置校驗,這樣能夠避免錯誤的數據進入到你的數據庫中,後續可能有風險。若是你的系統對於性能的要求特別特別的高,而安全校驗接口返回速度慢一些,在這種狀況下,你能夠選擇後置校驗,下降用戶在提交數據時的等待時間。
不過,後置校驗的話,必定記得在前端進行查詢的時候,將未審覈的部分提醒用戶,不可訪問,避免出現審覈問題。
在小程序中接入圖片安全校驗功能很簡單, 不過,在實際的接入過程當中, 你仍是須要配合本身的實際業務狀況來選擇如何接入。
若是你在開發的過程當中有任何問題,歡迎在下方留言告訴我。