情景再現:html
上傳文件到.net(wcf)後臺時,老是上傳不成功,後臺要求Content-Type是application/octet-stream,我使用multipart/form-data方式,content-type是multipart/form-data,後來查了查這是兩種不一樣的內容類型,在http的請求體中,數據組織方式不同,因此,後臺接收失敗。java
multipart/form-data:json
一、既能夠提交普通鍵值對,也能夠提交(多個)文件鍵值對。數組
二、HTTP規範中的Content-Type不包含此類型,只能用在POST提交方式下,屬於http客戶端(瀏覽器、java httpclient)的擴展瀏覽器
三、一般在瀏覽器表單中,或者http客戶端(java httpclient)中使用。app
頁面中,form的enctype是multipart/form-data,提交時,content-type也是multipart/form-data。post
multipart/form-data格式,url
POST http://www.xx.com/myproject/service1
.net
Host: 192.168.0.201:8694
3d
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Cache-Control: no-cache
Postman-Token: c3d85a6c-9849-7e3e-5c89-5b994b335b1d
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="name1"
value1
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="name2"
value2
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file1"; filename="94b5b232gw1ewlx3p595wg20ak0574qq.gif"
Content-Type: image/gif
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file2"; filename="1443175219259.jpg"
Content-Type: image/jpeg
----WebKitFormBoundary7MA4YWxkTrZu0gW
application/octet-stream
一、只能提交二進制,並且只能提交一個二進制,若是提交文件的話,只能提交一個文件,後臺接收參數只能有一個,並且只能是流(或者字節數組)
二、屬於HTTP規範中Content-Type的一種
三、不多使用
application/x-www-form-urlencoded
一、不屬於http content-type規範,一般用於瀏覽器表單提交,數據組織格式:name1=value1&name2=value2,post時會放入http body,get時,顯示在在地址欄。
二、全部鍵與值,都會被urlencoded,請查看urlencoder
數據組織格式
POST http://www.xx.com/myproject/service HTTP/1.1
Host: 192.168.0.201:8694
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: f5f6240c-08d3-8695-9473-607038f71eaa
name11=file1&name2=value2
參考:
原文地址:https://blog.csdn.net/andrewniu/article/details/81533905