這篇文章給大家分享的是有關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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。