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>

 最后还是要看他的属性

 

posted @ 2025-05-29 13:53  张筱菓  阅读(296)  评论(0)    收藏  举报