在小程序開發過程中,我們可能會遇到各種各樣的問題,比如,後端給我們一個接口,要求可以上傳圖片且進行表單提交,這個問題我們如果使用H5的情況下,可以很容易實現,比如我們使用創建FormData對象,然後將參數append到這個FormData對象中,再將這個對象提交到後臺。然而,如果在小程序中則無法使用FormData對象,因爲微信小程序沒有FormData對象。
如果小程序中我們是爲了上傳一個文件 的話,這樣也可以實現,比如我們使用wx.uploadFile方法:
wx.uploadFile({
url: "XXX",
filePath: file,
name: "xxx",
header: { xxx },
formData: from,
success(res) {
console.log(res)
},
fail(e) {
console.log(e)
}
})
然而,如果圖片非必填的情況下,就無法使用這個方式,只能使用FormData。後來通過在網上查找辦法,還真有大牛給提出了方案,於是將之寫下來給存一下,以免後來再用到。
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
}
使用時,可以通過 上面的方法先生成一個FormData對象,然後可以將這個formData傳給後臺即可:
const boundary = "WebKitFormBoundary" + new Date().getTime();
const formData = createFormData(param,boundary);
wx.request({
url: "xxx",
method: "POST",
header: {
"content-type": "multipart/form-data; boundary=" + boundary
},
data: formData,
success(res) {
},
fail(e) {
}
})
注意:上面的方法中,一定要把header中的content-type改爲multipart/form-data,不然會報錯:Current request is not a multipart request。 本文參考:https://developers.weixin.qq.com/community/develop/article/doc/0000cc0e5bc5d093c6f8be17254c13