前言html
小程序開發的過程當中,若是你涉及到文件的上傳,就須要使用微信提供的API去上傳文件:小程序
wx.uploadFile()
官方文檔的解釋這裏就很少介紹了,主要看一下這個方法具體如何使用以及爲何這樣使用。微信小程序
正文api
咱們能夠先看一下該API的參數說明:安全
其實wx.uploadFile的操做是你把要請求的數據以及要請求的服務器URL傳遞給微信服務器,微信服務器再拿着這些數據進行三方服務器請求。具體可參見下圖:(根據本身的理解畫的,若是不對,歡迎指正)服務器
因此url也就是咱們平時本身去請求咱們本身的服務器接口的地址,若是你的服務器須要校驗session或者token,你能夠在formData中添加,例如把須要的uid放到裏面:微信
var formData = { uid: app.globalData.uid, sessionKey: wx.getStorageSync("SESSIONKEY") };
function upLoadFile(url, filePath, name, formData, success, fail) { wx.uploadFile({ url: url, filePath: filePath, name: name, header: { 'content-type': 'multipart/form-data' }, formData:formData, //請求額外的form data success:function(res) { console.log(res); if(res.statusCode ==200){ typeof success == "function" && success(res.data); }else{ typeof fail == "function" && fail(res.data); } }, fail: function (res) { console.log(res); typeof fail == "function" && fail(res.data); } }) }
我這裏直接對上傳文件進行了封裝,微信服務器經過咱們給他的數據向咱們的服務器發送數據請求,請求成功後,微信服務器會對咱們本身的服務器返回的信息進行包裝,放到res.data裏面,這樣咱們就能夠直接從res.data中獲取到咱們的服務器給咱們反饋的信息了。 網絡
爲何要這麼作?而不是直接由咱們向本身的服務器發送請求呢?session
常規來講,咱們直接調用咱們本身服務器的接口,而後咱們本身的服務器返回數據小程序端便可。可是從uploadFile操做來講,實際上是微信服務器把本身當作了中轉站,全部的發送都要經過微信中轉進行操做。我的以爲這樣作的緣由以下:app
1.微信服務器有本身的一套臨時圖片連接,對於咱們本身的服務器而言沒法識別。
2.鑑於安全考慮,微信服務器會對圖片進行留存,保證內容在微信平臺上的合法性。
若是有其餘的緣由,也能夠留言!我也在微信小程序開發中心作了提問,最新信息能夠參見這裏。
參考文檔
1.網絡請求