在小程序開發(fā)的過程中,如果你的小程序中存在圖片上傳的能力,經(jīng)常會遇到同一個原因被拒絕審核:「沒有對上傳信息做審核」,想要過審核也很簡單,只要將用戶上傳的圖片提交審核就可以了。而且,微信也提供了這樣的接口給開發(fā)者,讓開發(fā)者做接入。如果你使用了云開發(fā),那就更加的簡單,只需要使用云調(diào)用,一行代碼就可以完成產(chǎn)品的調(diào)用。
不少人看過一個視頻,里面的代碼大致是這樣寫的,很簡單,但很有效的完成了圖片的安全檢測
// 云函數(shù)入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函數(shù)入口函數(shù) 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 } }); }
這段代碼在絕大多數(shù)情況下都是不會出現(xiàn)運行問題的,但是,這個大多數(shù)情況是指 這個圖片沒有安全問題 ,如果這個圖片的內(nèi)容有問題,你的小程序運行就會報錯,就像下面這樣。
這樣的報錯有問題么?沒有的,因為這個就是系統(tǒng)的運行機制,但是,這樣的問題如果不做處理,就會在實際應(yīng)用過程中出現(xiàn)問題。
這段報錯的意思是: 由于檢測的內(nèi)容出現(xiàn)了問題,導(dǎo)致系統(tǒng)出現(xiàn)了異常,從未拋出了一個異常,在這種情況下,開發(fā)者需要做的就是捕獲這個異常。在 JavaScript 中,我們只需要在我們的項目中加入 try...catch... 就可以處理了。
加入 try...catch... 后,我們得到的代碼是這樣的
// 云函數(shù)入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函數(shù)入口函數(shù) 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 } } }
這段代碼會在圖片沒有問題的時候回復(fù)一個 { "code": 0, "code":"ok"} ,如果圖片有問題的話,就會返回 {"code":1,"msg":"錯誤的原因"} 。
在這種情況下,你只需要在云函數(shù)的返回值中獲取到 code ,如果等于 0 ,就說明用戶上傳的圖片通過審核。如果返回 1 ,則說明用戶的圖片沒有通過審核。
前面的內(nèi)容介紹了如何開發(fā)出一個圖片安全校驗的云函數(shù),接下來,我們來看看如何在業(yè)務(wù)系統(tǒng)中接入這個功能。
實際上,我們有兩種方式在業(yè)務(wù)系統(tǒng)中實現(xiàn)圖片安全校驗,一種是前置校驗,一種是后置校驗。
前置校驗是指用戶所提交的數(shù)據(jù)還沒有提交到數(shù)據(jù)庫前對圖片進行校驗,如果圖片不合格,就不允許圖片提交到數(shù)據(jù)庫中。
后置校驗則是指用戶所提交的數(shù)據(jù)先提交到數(shù)據(jù)庫中,并標(biāo)記為審核中狀態(tài), 后續(xù)通過審核再修改狀態(tài)為通過,從而讓用戶提交的內(nèi)容在前臺可見。
一般而言,推薦大家使用前置校驗,這樣可以避免錯誤的數(shù)據(jù)進入到你的數(shù)據(jù)庫中,后續(xù)可能有風(fēng)險。如果你的系統(tǒng)對于性能的要求特別特別的高,而安全校驗接口返回速度慢一些,在這種情況下,你可以選擇后置校驗,降低用戶在提交數(shù)據(jù)時的等待時間。
不過,后置校驗的話,一定記得在前端進行查詢的時候,將未審核的部分提醒用戶,不可訪問,避免出現(xiàn)審核問題。
在小程序中接入圖片安全校驗功能很簡單, 不過,在實際的接入過程中, 你還是需要配合自己的實際業(yè)務(wù)情況來選擇如何接入。