vue?axios?form-data格式傳輸數(shù)據(jù)和文件方式
axios form-data格式 傳輸數(shù)據(jù)和文件
form-data是在post請求下的一種傳輸方式,數(shù)據(jù)會在Form Data中傳輸,他的格式不是正常的JSON格式傳輸?shù)?,傳輸?shù)臄?shù)據(jù)由boundary
(例子中的------WebKitFormBoundaryRO0YA4pq9oCgwTkt
)來分割
------WebKitFormBoundaryRO0YA4pq9oCgwTkt Content-Disposition: form-data; name="id" undefined ------WebKitFormBoundaryRO0YA4pq9oCgwTkt Content-Disposition: form-data; name="type" 1 ------WebKitFormBoundaryRO0YA4pq9oCgwTkt Content-Disposition: form-data; name="name" ......此處省略一堆參數(shù) ------WebKitFormBoundaryRO0YA4pq9oCgwTkt--
開始
默認的headers
中的Content-Type
是application/x-www-form-urlencoded
,首先要把Content-Type
改為
multipart/form-data; boundary={boundary}
(boundary
找你的后端要)
axios({ url: "/aaa/bbb", method: 'post', data: xxx, headers: {"Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryn8D9asOnAnEU4Js0" } }) // 或者在路由攔截中統(tǒng)一修改 service.interceptors.request.use( req => { req.headers = { // 'Content-Type': 'application/json', 'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryn8D9asOnAnEU4Js0', } return req; }
FormData
開頭處我們說了form-data
的傳輸格式,我們需要使用到formData對象
new FormData()
比如我們需要傳輸?shù)膶ο笫?/p>
{ name: '小紅', age: 18, file: File {name: "xxx.jpg",...} // 一個圖片文件 }
可以先創(chuàng)建一個FormData
對象,然后通過.append(key,val)
的方式將需要的內(nèi)容放在FormData
對象中,傳參時把這個對象傳過去就可以了
let formData = new FormData(); formData.append('name','小紅'); formData.append('age',18); formData.append('file',File文件);
傳輸
整體傳輸示例
// html <input type="file" ref="input" /> // js let formData = new FormData(); formData.append('name','小紅'); formData.append('age',18); formData.append('file',this.$refs.input.files[0]); let url = '你的請求地址' axios.post(url,formData,{ headers:{ "Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryn8D9asOnAnEU4Js0" } })
vue axios與FormData結(jié)合提交文件 上傳文件
---再利用Vue、axios、FormData做上傳文件時,遇到一個問題,后臺雖然接收到請求,但是將文件類型識別成了字符串,所以,web端一直報500,結(jié)果是自己大意了。
1.因為使用了new FormData來操作表單
并且在測試模擬請求時,從消息頭里看到的確實是表單提交【Content-Type: multipart/form-data】. 所以就沒有單獨在設置.
結(jié)果后來加上了這個配置才可以通過了。
這個必須設置:Content-Type: multipart/form-data
2.結(jié)合Vue、axios、FormData使用的例子
<template> <div id="sample"> <!--accept定義接收的文件類型,這里只接受圖片--> <input id="fileinput" @change="uploading($event)" type="file" accept="image/*"> <button @click="submit($event)"></button> </div> </template> <script> export default { name: 'sample', data () { return { file:'', src:'' }; }, methods:{ uploading(event){ this.file = event.target.files[0];//獲取文件 var windowURL = window.URL || window.webkitURL; this.file = event.target.files[0]; //創(chuàng)建圖片文件的url this.src = windowURL.createObjectURL(event.target.files[0]); }, submit(){ event.preventDefault();//取消默認行為 let formdata = new FormData(); formdata.append('file',this.file); //此處必須設置為 multipart/form-data let config = { headers: { 'Content-Type': 'multipart/form-data' //之前說的以表單傳數(shù)據(jù)的格式來傳遞fromdata } }; this.$http.post('/upload', formData, config).then( (res) => { //做處理 }).catch((error) =>{ }); } } }; </script> <style lang="css" scoped> </style>
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用vue-cli+webpack搭建vue開發(fā)環(huán)境的方法
這篇文章主要介紹了使用vue-cli+webpack搭建vue開發(fā)環(huán)境的方法,需要的朋友可以參考下2017-12-12解決npm安裝錯誤:No matching version found for&
這篇文章主要介紹了解決npm安裝錯誤:No matching version found for XXX@3.3.6問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07vue 使用async寫數(shù)字動態(tài)加載效果案例
這篇文章主要介紹了vue 使用async寫數(shù)字動態(tài)加載效果案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07vue3聲明響應式狀態(tài)使用(含ref,reactive,toRef(),toRefs()等)
這篇文章主要介紹了vue3聲明響應式狀態(tài)使用(含ref,reactive,toRef(),toRefs()等),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07Vue中el-menu-item實現(xiàn)路由跳轉(zhuǎn)的完整步驟
這篇文章主要給大家介紹了關(guān)于Vue中el-menu-item實現(xiàn)路由跳轉(zhuǎn)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2022-09-09