知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >
微信小程序(Taro)手撕FormData
發(fā)表時(shí)間:2021-1-11
發(fā)布人:葵宇科技
瀏覽次數(shù):171
小程序里沒(méi)有FormData
類,所以POST方法如果要傳multipart/form-data就會(huì)報(bào)錯(cuò)。
而npm上的formdata-polyfill
,類似 https://github.com/form-data/... 或者h(yuǎn)ttps://github.com/jimmywarti...
都不好用
好在有人探究出來(lái) https://developers.weixin.qq.... 可以手動(dòng)拼裝出FormData
格式的字符串,并且成功調(diào)用。
以下附代碼:
// 手動(dòng)拼接FormData字符串
// 函數(shù)邊界處理沒(méi)怎么做,各位可自行補(bǔ)充
// 數(shù)組和obj的情況沒(méi)有處理,可以用postman發(fā)個(gè)請(qǐng)求看看格式,很簡(jiǎn)單的
function createFormData(params = {}, boundary = '') {
let result = '';
for (let i in params) {
result += `\r\n--${boundary}`;
result += `\r\nContent-Disposition: form-data; name="${i}"`;
result += '\r\n';
result += `\r\n${params[i]}`
}
// 如果obj不為空,則最后一行加上boundary
if (result) {
result += `\r\n--${boundary}`
}
return result
}
// 通用post請(qǐng)求
export const post = function (url, params) {
return new Promise(function (resolve, reject) {
// 生成一個(gè)boundary字符串
const boundary = `----FooBar${new Date().getTime()}`;
const formData = http://www.wxapp-union.com/createFormData(params, boundary);
console.log(formData);
Taro.request({ // 這里我用的taro,改成wx.request也一樣
url,
method: 'POST',
credentials: 'include', //設(shè)置傳遞cookies
dataType: 'json',
header: {
'Accept': 'application/json',
'Content-Type': `multipart/form-data; boundary=${boundary}`,
},
data: formData,
timeout: 5000,
success: function (res) {
resolve(res.data);
},
fail: function (error) {
reject(error);
}
})
});
}
formdata格式
用postman發(fā)個(gè)formdata請(qǐng)求,我們可以看到數(shù)據(jù)長(zhǎng)這樣:
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="mobile"
13800138000
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="name"
張三
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="address"
地球
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="weappid"
abcdefghijklmn
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="id"
107
------WebKitFormBoundary7MA4YWxkTrZu0gW--
仔細(xì)觀察以下,就可以總結(jié)出上面的拼裝規(guī)則了。
其中,數(shù)據(jù)體中boundary
,是Content-Type
中的boundary
前面加--
。
開(kāi)頭和結(jié)尾還有每個(gè)field
之間要加上boundary
相關(guān)案例查看更多
相關(guān)閱讀
- 網(wǎng)站建設(shè)專業(yè)品牌
- 排名
- 海南小程序制作公司
- 生成海報(bào)
- 小程序制作
- 百度人工排名
- 云南網(wǎng)站建設(shè)招商
- 區(qū)塊鏈
- 昆明網(wǎng)站設(shè)計(jì)
- 汽車報(bào)廢回收軟件
- 云南網(wǎng)絡(luò)營(yíng)銷顧問(wèn)
- 定制小程序開(kāi)發(fā)
- 高端網(wǎng)站建設(shè)公司
- 網(wǎng)站開(kāi)發(fā)
- 出入小程序
- 云南網(wǎng)站開(kāi)發(fā)哪家好
- 網(wǎng)站建設(shè)專家
- 網(wǎng)站建設(shè)高手
- 云南百度小程序
- 云南網(wǎng)站建設(shè)價(jià)格
- 小程序分銷商城
- 云南小程序開(kāi)發(fā)公司哪家好
- 云南電商網(wǎng)站建設(shè)
- 汽車報(bào)廢回收管理軟件
- 云南企業(yè)網(wǎng)站
- 云南省建設(shè)廳網(wǎng)站官網(wǎng)
- 企業(yè)網(wǎng)站
- 模版信息
- 云南做百度小程序的公司
- 百度小程序開(kāi)發(fā)