微信小程序使用FormData方式提交

在小程序開發過程中,我們可能會遇到各種各樣的問題,比如,後端給我們一個接口,要求可以上傳圖片且進行表單提交,這個問題我們如果使用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章