Upload上传组件 ,elementUI组件
打开elementUI,找到这个组件

我们现在来详细解析一下这个
action就是服务器地址。

具体含义和对应位置

1 <template> 2 <!-- Element Plus 文件上传组件 --> 3 <!-- v-model:file-list="fileList" - 双向绑定已选择的文件列表到组件的fileList属性 --> 4 <!-- class="upload-demo" - 为组件添加自定义样式类 --> 5 <!-- action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" - 设置文件上传的目标URL(示例地址,实际使用时需替换为真实接口) --> 6 <!-- multiple - 允许选择多个文件 --> 7 <!-- :on-preview="handlePreview" - 当点击文件预览时触发的回调函数 --> 8 <!-- :on-remove="handleRemove" - 当文件被移除时触发的回调函数 --> 9 <!-- :before-remove="beforeRemove" - 文件移除前的钩子函数,可用于确认操作 --> 10 <!-- :limit="3" - 限制最多可上传的文件数量为3个 --> 11 <!-- :on-exceed="handleExceed" - 当选择的文件数量超过限制时触发的回调函数 --> 12 13 <el-upload 14 v-model:file-list="fileList" 15 class="upload-demo" 16 action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" 17 multiple 18 :on-preview="handlePreview" 19 :on-remove="handleRemove" 20 :before-remove="beforeRemove" 21 :limit="3" 22 :on-exceed="handleExceed" 23 > 24 <!-- 自定义上传按钮 --> 25 <!-- type="primary" - 使用Element Plus的主色调样式 --> 26 <el-button type="primary">Click to upload</el-button> 27 <!-- 上传提示信息的插槽(slot)定义 --> 28 <!-- <template #tip> - 用于定义上传组件的提示信息区域,#tip 是Element Plus上传组件的预留插槽名 --> 29 <template #tip> 30 <!-- 提示信息容器,使用el-upload__tip类名保证样式一致性 --> 31 <div class="el-upload__tip"> 32 <!-- 具体提示内容:限制文件类型为jpg/png,大小小于500KB --> 33 jpg/png files with a size less than 500KB. 34 </div> 35 </template> 36 </el-upload> 37 </template>

1 <script lang="ts" setup> 2 // 导入Vue的ref函数,用于创建响应式引用 3 import { ref } from 'vue' 4 // 导入Element Plus的消息提示和确认对话框组件 5 import { ElMessage, ElMessageBox } from 'element-plus' 6 // 导入Element Plus上传组件的类型定义 7 import type { UploadProps, UploadUserFile } from 'element-plus' 8 9 // 创建响应式文件列表,初始包含两个示例文件对象 10 // UploadUserFile[] 表示文件列表的类型,每个文件对象包含name和url属性 11 const fileList = ref<UploadUserFile[]>([ 12 { 13 name: 'element-plus-logo.svg', // 文件名称 14 url: 'https://element-plus.org/images/element-plus-logo.svg', // 文件访问URL 15 }, 16 { 17 name: 'element-plus-logo2.svg', 18 url: 'https://element-plus.org/images/element-plus-logo.svg', 19 }, 20 ]) 21 22 // 定义文件移除事件的处理函数,类型与UploadProps的onRemove一致 23 // 参数file为被移除的文件对象,uploadFiles为当前上传列表 24 const handleRemove: UploadProps['onRemove'] = (file, uploadFiles) => { 25 console.log(file, uploadFiles) // 打印被移除文件和当前列表 26 } 27 28 // 定义文件预览事件的处理函数,类型与UploadProps的onPreview一致 29 // 参数uploadFile为被预览的文件对象 30 const handlePreview: UploadProps['onPreview'] = (uploadFile) => { 31 console.log(uploadFile) // 打印被预览的文件信息 32 } 33 34 // 定义文件数量超出限制的处理函数,类型与UploadProps的onExceed一致 35 // 参数files为本次选择的超出限制的文件列表,uploadFiles为已上传的文件列表 36 const handleExceed: UploadProps['onExceed'] = (files, uploadFiles) => { 37 // 显示警告消息,提示当前选择和总文件数超出限制 38 ElMessage.warning( 39 `The limit is 3, you selected ${files.length} files this time, add up to ${ 40 files.length + uploadFiles.length 41 } totally` 42 ) 43 } 44 45 // 定义文件移除前的确认钩子函数,类型与UploadProps的beforeRemove一致 46 // 参数uploadFile为即将移除的文件对象,uploadFiles为当前上传列表 47 const beforeRemove: UploadProps['beforeRemove'] = (uploadFile, uploadFiles) => { 48 // 显示确认对话框,用户确认后返回true允许移除,取消则返回false阻止移除 49 return ElMessageBox.confirm( 50 `Cancel the transfer of ${uploadFile.name} ?` 51 ).then( 52 () => true, // 确认移除 53 () => false // 取消移除 54 ) 55 } 56 </script>
接下来我们看看这个


1 <template> 2 <!-- Element Plus 文件上传组件 --> 3 <!-- v-model:file-list="fileList" - 双向绑定文件列表,实时更新已选择的文件 --> 4 <!-- class="upload-demo" - 自定义样式类 --> 5 <!-- action - 文件上传的目标URL(示例地址,实际使用需替换) --> 6 <!-- :on-change="handleChange" - 文件状态改变时触发的回调函数 --> 7 <el-upload 8 v-model:file-list="fileList" 9 class="upload-demo" 10 action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" 11 :on-change="handleChange" 12 > 13 <!-- 自定义上传按钮 --> 14 <el-button type="primary">Click to upload</el-button> 15 16 <!-- 自定义提示信息区域 --> 17 <!-- #tip - Element Plus 预留的提示信息插槽 --> 18 <!-- 限制文件类型为jpg/png,大小小于500KB --> 19 <template #tip> 20 <div class="el-upload__tip"> 21 jpg/png files with a size less than 500kb 22 </div> 23 </template> 24 </el-upload> 25 </template> 26 27 <script lang="ts" setup> 28 // 导入Vue的ref函数,用于创建响应式数据 29 import { ref } from 'vue' 30 // 导入Element Plus上传组件的类型定义 31 import type { UploadProps, UploadUserFile } from 'element-plus' 32 33 // 定义响应式文件列表,初始包含两个示例文件 34 // UploadUserFile[] - 文件对象数组类型,包含name(文件名)和url(文件URL)等属性 35 const fileList = ref<UploadUserFile[]>([ 36 { 37 name: 'food.jpeg', 38 url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100', 39 }, 40 { 41 name: 'food2.jpeg', 42 url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100', 43 }, 44 ]) 45 46 // 文件状态变化时的回调函数 47 // uploadFile - 当前操作的文件对象 48 // uploadFiles - 当前所有已选择的文件列表 49 const handleChange: UploadProps['onChange'] = (uploadFile, uploadFiles) => { 50 // 限制文件列表最多保留3个文件 51 // slice(-3) - 截取数组最后3个元素,自动移除最早的文件 52 fileList.value = fileList.value.slice(-3) 53 } 54 </script>
还有这个拖拽上传


1 <template> 2 <!-- Element Plus 文件上传组件 --> 3 <!-- class="upload-demo" - 应用自定义样式类 --> 4 <!-- drag - 启用拖拽上传功能 --> 5 <!-- action - 设置文件上传的目标URL(示例地址,实际使用需替换为真实接口) --> 6 <!-- multiple - 允许选择多个文件 --> 7 <el-upload 8 class="upload-demo" 9 drag 10 action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" 11 multiple 12 > 13 <!-- 自定义上传区域内容 --> 14 <!-- el-icon - 显示上传图标 --> 15 <!-- UploadFilled - Element Plus提供的填充样式上传图标 --> 16 <el-icon class="el-icon--upload"><upload-filled /></el-icon> 17 18 <!-- 上传区域提示文本 --> 19 <!-- <em> - 强调"click to upload"部分 --> 20 <div class="el-upload__text"> 21 Drop file here or <em>click to upload</em> 22 </div> 23 24 <!-- 自定义上传提示信息 --> 25 <!-- #tip - Element Plus上传组件的提示信息插槽 --> 26 <!-- 限制文件类型为jpg/png,大小小于500KB --> 27 <template #tip> 28 <div class="el-upload__tip"> 29 jpg/png files with a size less than 500kb 30 </div> 31 </template> 32 </el-upload> 33 </template> 34 35 <script setup lang="ts"> 36 // 导入Element Plus提供的填充样式上传图标 37 // 用于在上传区域显示视觉引导图标 38 import { UploadFilled } from '@element-plus/icons-vue' 39 </script>
最后还是要看他的属性


浙公网安备 33010602011771号