前言
小程序開發的過程中,如果你涉及到文件的上傳,就需要使用微信提供的API去上傳文件:
wx.uploadFile()
官方文檔的解釋這里就不多介紹了,主要看一下這個方法具體如何使用以及為什么這樣使用。
正文
我們可以先看一下該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中獲取到我們的服務器給我們反饋的信息了。
為什么要這么做?而不是直接由我們向自己的服務器發送請求呢?
常規來說,我們直接調用我們自己服務器的接口,然后我們自己的服務器返回數據小程序端即可。但是從uploadFile操作來說,其實是微信服務器把自己當做了中轉站,所有的發送都要通過微信中轉進行操作。個人覺得這樣做的原因如下:
1.微信服務器有自己的一套臨時圖片鏈接,對於我們自己的服務器而言無法識別。
2.鑒於安全考慮,微信服務器會對圖片進行留存,保證內容在微信平台上的合法性。
如果有其他的原因,也可以留言!我也在微信小程序開發中心做了提問,最新信息可以參見這里。
參考文檔
1.網絡請求
