您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關vue如何實現上傳圖片文件的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
<input type="file" @change="onchangemd"> methods: { onchangemd(e){ console.log(e.target.files)//這個就是選中文件信息 let formdata = new FormData() Array.from(e.target.files).map(item => { console.log(item) formdata.append("file", item) //將每一個文件圖片都加進formdata }) axios.post("接口地址", formdata).then(res => { console.log(res) }) } }
當看到二進制提交數據,就成功了(binary)
這種也是成功的(是二進制的展開數據。因為有些瀏覽器不顯示binary)
上圖可以看出 傳統上傳文件是以二進制的格式formdata格式提交
<el-upload action="" :on-change="handleelchange" :auto-upload="false" list-type="picture-card"> <i class="el-icon-plus"></i> </el-upload> handleelchange(file, fileList) { console.log(file, fileList) let formdata = new FormData() fileList.map(item => { //fileList本來就是數組,就不用轉為真數組了 formdata.append("file", item.raw) //將每一個文件圖片都加進formdata }) axios.post("接口地址", formdata).then(res => { console.log(res) }) },
不用設置請求頭等(直接用FormData格式提交就行),當看到formdata數據為二進制就說明提交正常(binary),同樣有些瀏覽器不顯示binary,以------WebKitFormBoundaryXoZpi2juymcNoW0l 開頭的這種也是提交正常的
注意fileList數組中的raw才是真實文件數據,如果直接用item而不是item.raw,那么會報500錯誤,并且formdata中的數據不是二進制而是對象格式
fileList.map(item => { formdata.append(“file”, item) //錯誤實例。要用item.raw })
elementui
注意: 管用思維,點擊提交然后觸發表單提交事件,然后表單提交事件中發起請求。
結果: 上傳每張圖片都需要發起請求,即會發起多次請求
處理: 在submit階段(即this.$refs.xxx.submit() 這步就發起請求),在提交函數中僅僅只進行圖片獲取
多張圖片上傳最后一個注意點: 多張圖片的這個file不能寫死,formdata.append(“file”, item) ,寫為每張圖片的指定name,不然會覆蓋。
<el-upload ref="elupload" action="" multiple :auto-upload="false" :http-request="handleupload" list-type="picture-card"> <i class="el-icon-plus"></i> </el-upload> <button @click="uploadelupload">點擊提交</button> methods:{ uploadelupload() { let formdata = new FormData() this.$refs.elupload.submit(); // 這里是執行文件上傳的函數,其實也就是獲取我們要上傳的文件 this.fileList.forEach(item => { formdata.append("file", item) //將每一個文件圖片都加進formdata }) formdata.append("score", 4) axios.post("接口地址", formdata).then(res => { console.log(res) }) }, handleupload(param) { this.fileList.push(param.file);// 一般情況下是在這里創建FormData對象,但我們需要上傳多個文件,為避免發送多次請求,因此在這里只進行文件的獲取,param可以拿到文件上傳的所有信息 }, }
后端讓傳圖片、以及其他數據。
注意圖片文件等:必須使用formdata傳過去
其他數據等:用普通方式傳遞
代碼與上述大體相同、這里就只寫axios請求格式 let formdata = new FormData() formdata.append("file", item) //將每一個文件圖片都 axios({ method: "post", url: "接口地址", data: formdata, params: { score: 4, content: "xxxxx", order_detail_id: 24, token: "xxxx" } }).then(res => { console.log(res) })
Vue是一套用于構建用戶界面的漸進式JavaScript框架,Vue與其它大型框架的區別是,使用Vue可以自底向上逐層應用,其核心庫只關注視圖層,方便與第三方庫和項目整合,且使用Vue可以采用單文件組件和Vue生態系統支持的庫開發復雜的單頁應用。
感謝各位的閱讀!關于“vue如何實現上傳圖片文件”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。