el-upload?文件上傳組件的使用講解
Upload 上傳文件
element-ui官網(wǎng)
element ui=>upload上傳組件
Upload 上傳文件這個(gè)功能是我們?cè)谄髽I(yè)實(shí)際開(kāi)發(fā)當(dāng)中使用頻率是非常高的這樣一個(gè)文件上傳的功能,,element ui組件組也給我們提供了上傳的組件。所有我們一定要熟悉掌握它
使用之前先進(jìn)行一下element ui的安裝和配置
打開(kāi)終端=>輸入npm i element-ui -S
npm i element-ui -S
就拿其中的一個(gè)拖拽上傳一個(gè)例子進(jìn)行說(shuō)說(shuō)吧
el-upload拖拽上傳官網(wǎng)源代碼
<el-upload class="upload-demo" drag action="https://jsonplaceholder.typicode.com/posts/" multiple> <i class="el-icon-upload"></i> <div class="el-upload__text">將文件拖到此處,或<em>點(diǎn)擊上傳</em></div> <div class="el-upload__tip" slot="tip">只能上傳jpg/png文件,且不超過(guò)500kb</div> </el-upload>
接下來(lái)咱們就創(chuàng)建一個(gè)vue組件進(jìn)行使用和講解
1.先搭建一個(gè)vue項(xiàng)目
vue項(xiàng)目搭建可以參考這篇文章
2.使用element-ui和創(chuàng)建vue組件
配置element-ui
main.js
import Vue from 'vue' import App from './App.vue' import './registerServiceWorker' import router from './router' import store from './store' // 引入element ui import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.config.productionTip = false Vue.use(ElementUI); new Vue({ el: '#app', router, store, render: h => h(App) })
創(chuàng)建一個(gè)組件,用于放el-upload
upload.vue,首先先把element的組件放進(jìn)來(lái),接下來(lái)再進(jìn)行更改配置
<template> <div> <el-upload class="upload-demo" drag action="https://jsonplaceholder.typicode.com/posts/" multiple> <i class="el-icon-upload"></i> <div class="el-upload__text">將文件拖到此處,或<em>點(diǎn)擊上傳</em></div> <div class="el-upload__tip" slot="tip">只能上傳jpg/png文件,且不超過(guò)500kb</div> </el-upload> </div> </template> <script> export default { data() { return { } } } </script> <style scoped></style>
展示upload組件,為了方便我就不配置路由了,直接在App.vue引入展示
App.vue
<template> <div id="app"> <uploadView/> </div> </template> <script> // 引入創(chuàng)建的upload.vue組件 import uploadView from './views/upload.vue' export default{ components:{ uploadView } } </script> <style scope> </style>
首次展示效果
el-upload參數(shù)講解
文件上傳
使用el-upload組件完成,action 是后端地址,是后端請(qǐng)求的接口地址。
常用參數(shù):
- action 后臺(tái)路徑,前端負(fù)責(zé)手機(jī),然后傳給后臺(tái),比如存到數(shù)據(jù)庫(kù)等等
- div class=“el-upload__text”
- div class=“el-upload__tip” slot=“tip”
div的文字自己根據(jù)需求可以自行更改
圖片上傳
imgUpload圖片上傳組件封裝
<template> <div> <!-- 圖片上傳 --> <el-upload class="avatar-uploader" action="https://jsonplaceholder.typicode.com/posts/" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload"> <img v-if="imageUrl" :src="imageUrl" class="avatar"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </div> </template> <script> export default { data() { return { imageUrl: '' // 接受我們上傳圖片的地址,上傳成功以后給的地址 }; }, methods: { // 上傳成功的回調(diào) handleAvatarSuccess(res, file) { //demo 轉(zhuǎn)換成url,后期可以換成后端給我們返回的地址 this.imageUrl = URL.createObjectURL(file.raw); // 轉(zhuǎn)化可以顯示頁(yè)面的地址,其實(shí)正常開(kāi)發(fā)中已經(jīng)可以拿到后端返回的地址,可以直接使用的 }, // 上傳之前的回調(diào) beforeAvatarUpload(file) { // isJPG圖片格式是否符合我們的規(guī)定 const isJPG = file.type === 'image/jpeg'; // isLt2M 文件大小是否符合我們的規(guī)定 const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG) { this.$message.error('上傳頭像圖片只能是 JPG 格式!'); } if (!isLt2M) { this.$message.error('上傳頭像圖片大小不能超過(guò) 2MB!'); } return isJPG && isLt2M; } } } </script> <style scoped> /* 圖片上傳樣式 */ .avatar-uploader .el-upload { border: 1px dashed #d9d9d9; border-radius: 6px; cursor: pointer; position: relative; overflow: hidden; } .avatar-uploader .el-upload:hover { border-color: #409EFF; } .avatar-uploader-icon { font-size: 28px; color: #8c939d; width: 178px; height: 178px; line-height: 178px; text-align: center; } .avatar { width: 178px; height: 178px; display: block; } </style>
把App.vue展示的組件替換為我們的imgUpload組件
<template> <div id="app"> <!-- 文件上傳 --> <!-- <uploadView/> --> <!-- 圖片上傳 --> <imgUpload/> </div> </template> <script> // 引入創(chuàng)建的upload.vue組件 // 文件上傳 import uploadView from './views/upload.vue' // 圖片上傳 import imgUpload from './views/imgUpload.vue' export default{ components:{ uploadView, imgUpload } } </script> <style> </style>
el-upload 常用屬性
- action可以根據(jù)我們的需求改為后端地址
- headers 設(shè)置上傳的請(qǐng)求頭部
- method 設(shè)置上傳請(qǐng)求方法
- multiple 是否支持多選文件
- disabled 是否禁用上傳
- data 上傳時(shí)附帶的額外參數(shù)
- name 上傳的文件字段名
- limit 允許上傳文件的最大數(shù)量
- with-credentials 支持發(fā)送cookie憑證信息
- show-file-list 是否顯示已上傳文件列表
- accept 接受上傳的文件類型
- drag 是否啟用拖拽上傳
- on-success 上傳成功的回調(diào)
- before-upload 準(zhǔn)備上傳的回調(diào)
- list-type列表展示的形式或者類型 text/picture/picture-card
- list-type: 文件列表的類型,‘text’ | ‘picture’ | ‘picture-card’。
- auto-upload 是否自動(dòng)上傳文件
- file-list/v-model:file-list 默認(rèn)上傳文件
- http-request 覆蓋默認(rèn)的 Xhr 行為,允許自行實(shí)現(xiàn)上傳文件的請(qǐng)求
- on-success 文件上傳成功時(shí)的鉤子
- on-error 文件上傳失敗時(shí)的鉤子
- on-progress 文件上傳時(shí)的鉤子
- on-change 文件狀態(tài)改變時(shí)的鉤子,添加,上傳成功和失敗都會(huì)被調(diào)用
- on-exceed 當(dāng)超出限制時(shí)執(zhí)行的鉤子
- before-upload 文件上傳之前的鉤子,參數(shù)為上傳的文件, 若返回false或者返回 Promise 且被 reject,則停止上傳。
- before-remove 刪除文件之前的鉤子,參數(shù)為上傳的文件和文件列表, 若返回 false 或者返回 Promise 且被 reject,則停止刪除。
- abort 取消上傳請(qǐng)求
- submit 手動(dòng)上傳文件列表
- clearFiles 清空已上傳的文件列表(該方法不支持在 before-upload 中調(diào)用)
- handleStart 手動(dòng)選擇文件
- handleRemove 手動(dòng)移除文件。 file 和rawFile 已被合并。
- on-preview 查看按鈕=>對(duì)應(yīng)一個(gè)回調(diào),回調(diào)參數(shù)對(duì)應(yīng)我們當(dāng)前點(diǎn)擊的文件 官方點(diǎn)擊文件列表中已上傳的文件時(shí)的鉤子
handlepreview (file)
on-remove 刪除按鈕=>對(duì)應(yīng)一個(gè)回調(diào),回調(diào)參數(shù)對(duì)應(yīng)我們當(dāng)前點(diǎn)擊的刪除的文件和剩余的文件列表 文件列表移除文件時(shí)的鉤子
handleremove (file,filelist)
更多的查看官網(wǎng)即可
踩坑
- 設(shè)置了Content-Type: multipart/form-data;此時(shí)請(qǐng)求一直沒(méi)有隨機(jī)數(shù)boundary=----WebKitFormBoundarypzSlbADtTRuFx5FC。
- 如果設(shè)置了全局的content-type,會(huì)發(fā)現(xiàn)上傳接口設(shè)置multipart/form-data是不起作用的,因?yàn)闆](méi)有Boundary,所以上傳必定失敗,服務(wù)器500。
- 然后嘗試手動(dòng)添加Boundary,這次錯(cuò)誤變400了
- 后來(lái)通過(guò)查詢資料,說(shuō)不用設(shè)置Content-Type: multipart/form-data;只要參數(shù)是formData形式,瀏覽器就會(huì)自動(dòng)將請(qǐng)求頭的Content-Type轉(zhuǎn)成Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypzSlbADtTRuFx5FC。
- 但是我不設(shè)置的話就是默認(rèn)的application/json。
- 于是查閱資料發(fā)現(xiàn)axios的transformRequest屬性可以在向服務(wù)器發(fā)送請(qǐng)求數(shù)據(jù)之前修改請(qǐng)求數(shù)據(jù),因?yàn)槲覀兊恼?qǐng)求在默認(rèn)的post請(qǐng)求方式時(shí)Content-Type的值是application/json,需要去掉默認(rèn)的值,這樣瀏覽器就可以自動(dòng)添加了。
globObj.$axios({ url: url, method: 'post', transformRequest: [function(data, headers) { // 去除post請(qǐng)求默認(rèn)的Content-Type delete headers['Content-Type'] return data }], data: formData, timeout: 300000 }).then(res => { ElMessage.success('資產(chǎn)添加成功'); }).catch((err) => { console.log(err); });
如果還要傳其他的參數(shù),其他的參數(shù)必須也要append進(jìn)去,否則可能會(huì)報(bào)參數(shù)錯(cuò)誤。
const formData = new FormData(); formData.append('file', file); // 其他參數(shù) formData.append('mailSys', mailSys);
到此這篇關(guān)于el-upload 文件上傳組件的使用的文章就介紹到這了,更多相關(guān)el-upload 上傳組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 解決elementui上傳組件el-upload無(wú)法第二次上傳問(wèn)題
- 解決ElementUI組件中el-upload上傳圖片不顯示問(wèn)題
- 結(jié)合el-upload組件實(shí)現(xiàn)大文件分片上傳功能
- 如何在ElementUI的上傳組件el-upload中設(shè)置header
- elementui使用el-upload組件如何實(shí)現(xiàn)自定義上傳
- Element el-upload上傳組件使用詳解
- vue-cli3.0+element-ui上傳組件el-upload的使用
- elemetUi 組件--el-upload實(shí)現(xiàn)上傳Excel文件的實(shí)例
相關(guān)文章
詳解如何在vue項(xiàng)目中設(shè)置首頁(yè)
這篇文章主要給大家介紹如何在vue項(xiàng)目中設(shè)置首頁(yè),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12關(guān)于Vue?監(jiān)控?cái)?shù)組的問(wèn)題
這篇文章主要介紹了Vue?監(jiān)控?cái)?shù)組的示例,主要包括Vue?是如何追蹤數(shù)據(jù)發(fā)生變化,Vue?如何更新數(shù)組以及為什么有些數(shù)組的數(shù)據(jù)變更不能被?Vue?監(jiān)測(cè)到,對(duì)vue監(jiān)控?cái)?shù)組知識(shí)是面試比較常見(jiàn)的問(wèn)題,感興趣的朋友一起看看吧2022-05-05vue如何使用window.open打開(kāi)頁(yè)面并拼接參數(shù)
這篇文章主要介紹了vue如何使用window.open打開(kāi)頁(yè)面并拼接參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09vue3.0 CLI - 2.6 - 組件的復(fù)用入門(mén)教程
這篇文章主要介紹了 vue3.0 CLI - 2.6 - 組件的復(fù)用,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-09-09Vue3 根據(jù)路由動(dòng)態(tài)生成側(cè)邊菜單的方法
本文介紹了如何在Vue3項(xiàng)目中根據(jù)路由動(dòng)態(tài)生成側(cè)邊菜單,包括準(zhǔn)備工作、路由配置基礎(chǔ)、組件搭建和優(yōu)化與拓展,通過(guò)這些步驟,可以實(shí)現(xiàn)一個(gè)靈活且可擴(kuò)展的側(cè)邊菜單系統(tǒng),提升用戶體驗(yàn),感興趣的朋友一起看看吧2025-01-01el-select 數(shù)據(jù)回顯,只顯示value不顯示lable問(wèn)題
這篇文章主要介紹了el-select 數(shù)據(jù)回顯,只顯示value不顯示lable問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09vxe-table?實(shí)現(xiàn)按回車鍵自動(dòng)新增一行(示例代碼)
本文通過(guò)示例代碼介紹了vxe-table新版本中實(shí)現(xiàn)回車自動(dòng)換行功能的方法,通過(guò)設(shè)置keyboard-config.isLastEnterAppendRow參數(shù)可以控制是否開(kāi)啟該功能,當(dāng)回車鍵在最后一行按下時(shí),會(huì)自動(dòng)新增一行,并將光標(biāo)移動(dòng)到新行,代碼簡(jiǎn)單易懂,感興趣的朋友跟隨小編一起看看吧2024-12-12