小程序里没有FormData类,所以POST办法如果要传multipart/form-data就会报错。

而npm上的formdata-polyfill,相似 https://github.com/form-data/... 或者https://github.com/jimmywarti...
都不好用

好在有人探索进去 https://developers.weixin.qq.... 能够手动拼装出FormData格局的字符串,并且胜利调用。

以下附代码:

// 手动拼接FormData字符串// 函数边界解决没怎么做,各位可自行补充// 数组和obj的状况没有解决,能够用postman发个申请看看格局,很简略的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申请export const post = function (url, params) {  return new Promise(function (resolve, reject) {    // 生成一个boundary字符串    const boundary = `----FooBar${new Date().getTime()}`;    const formData = createFormData(params, boundary);    console.log(formData);    Taro.request({ // 这里我用的taro,改成wx.request也一样      url,      method: 'POST',      credentials: 'include', //设置传递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发个formdata申请,咱们能够看到数据长这样:

Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW------WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="mobile"13800138000------WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="name"张三------WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="address"地球------WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="weappid"abcdefghijklmn------WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="id"107------WebKitFormBoundary7MA4YWxkTrZu0gW--

仔细观察以下,就能够总结出下面的拼装规定了。
其中,数据体中boundary,是Content-Type中的boundary后面加--

结尾和结尾还有每个field之间要加上boundary