欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

微信小程序(Taro)手撕FormData - 新聞資訊 - 云南小程序開(kāi)發(fā)|云南軟件開(kāi)發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開(kāi)發(fā)/軟件開(kāi)發(fā)

知識(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)案例查看更多