下面你的疑問和下面的問題一致,那么這篇文章這是你所需要的顶掉。
問題
- FormData的作用是什么草娜?
- FormData的無論把數(shù)據(jù)包裝成什么樣子,數(shù)據(jù)總要通過網(wǎng)絡(luò)才能發(fā)送痒筒。那么它的請求頭和請求體是什么樣子宰闰?
問題1解答:
?? FormData的作用和form表單的作用是一樣。不同點是我們拿js來操作FormData簿透,靈活性是form表單無法比擬的移袍。
問題2解答:
(1).在請求頭中設(shè)置Content-Type值
Content-Type:“multipart/form-data;boundary=----"+一段隨機的字母
上面的boundary正如字面的意思一樣,就是一個分界的意思老充,分開每一個鍵值對數(shù)據(jù)葡盗。boundary是一個變量,可以是一串隨機數(shù),不過FormData默認(rèn)是四個"-"加一串隨機數(shù)
(2). 請求體的內(nèi)容是:
請求體的結(jié)束為: --boundary--
對于發(fā)送的數(shù)據(jù)有兩種類型啡浊,一種為文本觅够,一種為文件
文本的類型的請求體為:
--boundary[換行]
Content-Disposition:form-data;name=“數(shù)據(jù)的鍵”[換行]
[換行]
數(shù)據(jù)的值[換行]
文件類型的請求體為:
—boundary[換行]
Content-Disposition:form-data;name=“數(shù)據(jù)的鍵”;filename=“文件名”[換行]
[換行]
Content-Type:*/*[換行]
[換行]
文件內(nèi)容的二進制
文本類型的數(shù)據(jù)和文件類型的數(shù)據(jù)是可以一起發(fā)送的。這一點很棒巷嚣。比如發(fā)送的數(shù)據(jù)為:
{
username:123456,
password:67890,
picture:文件數(shù)據(jù)(其實這里是將文件轉(zhuǎn)換為二進制了)
}
在請求體中為:
--boundary
Content-Disposition:form-data;name="username"
123456
--boundary
Content-Disposition:form-data;name="password"
67890
--boundary
Content-Disposition:form-data;name="picture";filename="上傳的文件名"
Content-Type:image/jpeg;
對圖片進行二進制編碼后的數(shù)據(jù)
--boundary--