element-plus上传图片组件,上传之前文件格式大小校验的问题

组件默认是自动上传auto-upload为true,这时直接走before-upload钩子没问题
当要手动上传时,走before-upload不会触发该钩子。

这时就要选择on-change

<el-upload class="upload-demo" action="#" multiple :auto-upload="false" list-type="picture"
           :on-change="beforeAvatarUpload" :on-preview="handlePreview">
    <el-button size="large" plain>上传图片备注</el-button>
    <template #tip>
       <div class="el-upload__tip">
          注:上传jpg、jpeg、png格式的图片,图片大小<5M
       </div>
     </template>
 </el-upload>

import type { UploadProps,UploadFiles } from 'element-plus'

const beforeAvatarUpload: UploadProps['onChange'] = (file,fileList:UploadFiles) => {
    
    if (file.status !== "ready") return;
    let rawFile = file.raw!;
    fileList.forEach((_,index:number)=>{
        if (rawFile.type == 'image/png' || rawFile.type == 'image/jpeg' || rawFile.type == 'image/jpg') {
            if (rawFile.size / 1024 / 1024 < 5) {
                return true;
            } else {
                ElMessage({
                    type: 'error',
                    message: '上传文件大小小于5M'
                })
                return false;
            }
        } else {
            ElMessage({
                type: 'error',
                message: "上传文件格式务必PNG|JPG|JPEG"
            })
            fileList.splice(index, 1);
            return false;
        }
    })
}

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Vue3 Element Plus 提供了一个上传文件的组件,可以通过以下步骤来使用: 1. 安装 Element Plus ``` npm install element-plus --save ``` 2. 在 main.js 中引入 Element Plus ``` import { createApp } from 'vue' import ElementPlus from 'element-plus' import 'element-plus/lib/theme-chalk/index.css' const app = createApp(App) app.use(ElementPlus) app.mount('#app') ``` 3. 在组件中使用上传文件组件 ``` <template> <el-upload class="upload-demo" action="/upload" :on-success="handleSuccess" :before-upload="beforeUpload" :auto-upload="false" :file-list="fileList" multiple> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> </template> <script> export default { data() { return { fileList: [] } }, methods: { handleSuccess(response, file, fileList) { console.log(response, file, fileList) }, beforeUpload(file) { const isJPG = file.type === 'image/jpeg' || file.type === 'image/png' const isLt500K = file.size / 1024 < 500 if (!isJPG) { this.$message.error('上传头像图片只能是 JPG/PNG 格式!') } if (!isLt500K) { this.$message.error('上传头像图片大小不能超过 500KB!') } return isJPG && isLt500K } } } </script> ``` 以上代码中,我们使用了 Element Plus 的 el-upload 组件来实现文件上传功能。其中,我们可以通过设置 action 属性来指定上传文件的接口地址,通过设置 on-success 属性来指定上传成功后的回调函数,通过设置 before-upload 属性来指定上传前的校验函数,通过设置 auto-upload 属性来指定是否自动上传,通过设置 file-list 属性来指定已上传的文件列表,通过设置 multiple 属性来指定是否支持多选文件。同时,我们还可以通过 slot 来自定义上传按钮和提示信息。 ### 回答2: Vue3是目前非常流行的前端开发框架之一,而Element Plus则是基于Vue3的UI组件库。在Vue3 Element Plus中上传文件是非常常见的功能,本篇回答就来详细介绍一下如何使用Element Plus上传文件的方法。 一、引入Element Plus组件库 首先,我们需要在Vue3项目中引入Element Plus组件库。可以通过CDN或者npm的方式进行引入。 import { createApp } from 'vue'; import ElementPlus from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; const app = createApp(App); app.use(ElementPlus); app.mount('#app'); 二、使用upload组件实现文件上传 Element Plus提供了一个独立组件--upload,它可以方便地实现文件上传功能。使用upload组件需要注意以下几个点: 1. 首先需要将upload组件添加到页面上,可以通过template或者JSX的方式进行添加: <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" :on-success="handleSuccess" :before-upload="beforeUpload"> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> 其中,action属性指定了文件上传的API接口地址,:on-success则是文件上传成功后的回调函数,:before-upload则是在上传之前对文件进行校验的回调函数。 2. 在Vue3组件中定义对应的方法: <script> export default { methods: { beforeUpload(file) { // 校验文件类型和大小 const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'; const isLt500k = file.size / 1024 < 500; if (!isJpgOrPng) { this.$message.error('只能上传jpg/png文件!'); return false; } if (!isLt500k) { this.$message.error('文件大小不能超过500kb!'); return false; } // 校验通过 return true; }, handleSuccess(response) { this.$message.success('上传成功!'); }, }, }; </script> beforeUpload方法主要用来对文件进行校验,handleSuccess方法则是上传成功后的回调函数,在这个函数中可以进行一些后续操作。 三、其他配置 除了以上两个方面,还可以按照需求对一些其他配置进行设置。例如可以设置上传文件的格式上传限制大小上传时自动压缩等等,具体可以参考Element Plus官方文档。 总结 在Vue3 Element Plus中实现文件上传相当简单,只需要使用El-upload组件便可快速完成。而且通过定义beforeUpload和handleSuccess方法,还可以对上传的文件进行一些自定义操作。使用Element Plus可以让我们更加方便快捷地开发出优秀的Vue3前端项目。 ### 回答3: Vue3 Element-Plus是一个基于Vue3框架的UI组件库,它提供了丰富的组件,包括上传文件组件Vue3 Element-Plus上传文件时,需要用到el-upload组件。下面我将向大家介绍如何在Vue3 Element-Plus中使用el-upload组件。 1.安装Element-Plus 首先,我们需要安装Element-Plus。安装Element-Plus的方法很简单,只需要通过npm安装即可: npm i element-plus -S 2.引入Element-Plus 安装Element-Plus后,我们需要将它引入我们的项目中。在Vue3的main.js文件中,加入如下代码: import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus'; import 'element-plus/dist/index.css'; const app = createApp(App); app.use(ElementPlus); app.mount('#app'); 3.使用el-upload组件Vue3 Element-Plus中,使用el-upload组件实现上传功能是非常简单的。只需要在模板中添加如下代码即可: <el-upload action="/api/upload" :headers="{ token: 'ABCDEFG' }" :on-success="handleSuccess"> <el-button>点击上传</el-button> </el-upload> 在这个例子中,我们定义了一个上传组件,它的上传地址是“/api/upload”,同时设置了HTTP请求的Headers,具体设置可以根据实际需要进行修改。另外,我们还定义了一个回调函数handleSuccess,这个函数会在上传成功后执行。 4.处理上传文件 在设置上传组件的on-success属性时,我们定义了一个回调函数handleSuccess。这个函数会在上传文件成功后执行,我们可以在这个函数中对上传的文件进行处理。例如: methods: { handleSuccess(response, file) { // 处理上传文件的返回结果 } } 在这个函数中,response是从服务端返回的上传文件的结果,我们可以根据这个结果来进行后续的处理。file是上传的文件对象,我们也可以对这个对象进行处理。 总结 Vue3 Element-Plus是一个很好用的UI组件库,它提供了丰富的组件,包括上传文件组件。在使用Vue3 Element-Plus上传文件时,我们只需要使用el-upload组件,它提供了非常简单的上传功能,同时还可以通过设置回调函数来对上传完成后的文件进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值