AntDesign VUE:上传组件图片/视频宽高、文件大小、image/video/pdf文件类型等限制(Promise、Boolean)
文件大小限制 - Promise
checkFileSize(file, rules) {
return new Promise((resolve, reject) => {
file.size / 1024 / 1024 > rules ? reject() : resolve()
}).then(
() => {
return true
},
() => {
this.$message.error(`文件大小不能超过 ${rules} MB`)
return Promise.reject()
}
)
}
文件类型限制 - Promise
checkFileType(file, rules) {
return new Promise((resolve, reject) => {
rules && rules.includes(file.type) ? resolve() : reject()
}).then(
() => {
return true
},
() => {
this.$message.error('请上传正确格式的图片,如jpg、png、jpeg')
return Promise.reject()
}
)
}
图片宽高和比例限制 - Promise
checkImageWH(file, rules) {
const _this = this
return new Promise((resolve, reject) => {
const filereader = new FileReader()
filereader.readAsDataURL(file)
filereader.onload = e => {
const src = e.target.result
const image = new Image()
image.onload = function() {
/**
图片宽度: this.width
图片高度: this.height
*/
// someBool ? resolve() : reject()
}
image.onerror = reject
image.src = src
}
}).then(
() => {
return true
},
() => {
_this.$message.error('图片过于模糊/图片宽高比例不符,请重新上传')
return Promise.reject()
}
)
},
视频宽高和比例限制 - Promise
checkVideoWH(file, rules) {
return new Promise(function(resolve, reject) {
var url = URL.createObjectURL(file)
var video = document.createElement('video')
video.onloadedmetadata = evt => {
// Revoke when you don't need the url any more to release any reference
URL.revokeObjectURL(url)
// someBool ? resolve() : reject()
}
video.src = url
video.load() // fetches metadata
}).then(
() => {
return true
},
() => {
this.$message.error(`上传视频的宽高比例不符合要求,请重传${rules.rate[1] === 1 ? '等比视频' : (rules.rate[0] > 1 ? '横屏视频' : '竖屏视频')}`)
return Promise.reject()
}
)
}
beforeUpload - Boolean
将已有且需要的条件拼起来,使用AntDesign Upload提供的 beforeUpload 作为Boolean判断已完成上传限制。
async beforeUpload(file) {
const { filesSize, filesFormat, fileLimit} = this // 文件大小、文件类型、图片/视频宽高限制
const isFileSize = filesSize ? await this.checkFileSize(file, filesSize) : true
const isFileType = filesFormat ? await this.checkFileType(file, filesFormat) : true
if (fileLimit && fileLimit.type * 1 === 1) {
const isImageLimit = fileLimit? await this.checkImageWH(file, fileLimit) : true
return isFileSize && isFileType && isImageLimit
} else if (fileLimit&& fileLimit.type * 1 === 2) {
const isVideoLimit = fileLimit? await this.checkVideoWH(file, fileLimit) : true
return isFileSize && isFileType && isVideoLimit
} else {
return isFileSize && isFileType
}
}
我的另一篇相关文章:AntDesign VUE:上传组件自定义限制的两种方式(Boolean、Promise)
参考文章:antd上传组件upload踩坑和封装.
- END -
AntDesign VUE:上传组件图片/视频宽高、文件大小、image/video/pdf文件类型等限制(Promise、Boolean)的更多相关文章
- vue : 检测用户上传的图片的宽高
需求: 用户可上传3-6张图片(第 1 2 3 张必须传),上传的图片必须是540 * 330 像素. 第一步,获取上传的图片的宽高. 初始化一个对象数组,宽高均设为0. 如果用户上传的图片没有上限, ...
- 【React踩坑记四】React项目中引入并使用js-xlsx上传插件(结合antdesign的上传组件)
最近有一个前端上传并解析excel/csv表格数据的需求. 于是在github上找到一个14K star的前端解析插件 github传送门 官方也有,奈何实在太过于浅薄.于是做了以下整理,避免道友们少 ...
- 图片上传(3)(组件 -- 图片大小宽高限制)base64图片宽高读取
1.上传组件(可上传多个文件) <template> <div class="attachmentN"> <span class="btnS ...
- elementUI 图片上传限制上传图片的宽高
文件上传,需当上传的文件类型为图片的时候,需要限制图片的宽高. 此处采用了new Promise异步加载的方式,等图片上传加载完成后, 页面代码: <el-form-item label=&qu ...
- sysUpload.vue上传组件 的时候 看进度的时候 不要mock 注释掉 // if (process.env.NODE_ENV !== 'production') require('@/mock')
上传组件 的时候 看进度的时候 不要mock 注释掉 // if (process.env.NODE_ENV !== 'production') require('@/mock') <!-- * ...
- 基于vue上传base64图片,通过canvas压缩base64
其实和vue关系不大,和我们之前做上传压缩性质是一样的 当然下面的代码是没有处理ios横屏拍照的bug的 有兴趣的可以多搜一下 网上都有相应的解答 .. var that = this if (e. ...
- vue 上传二进制图片
1.前段代码 <el-form-item label="证件照片" prop="idImage"> <input @change='ss' t ...
- AntDesign VUE:上传组件自定义限制的两种方式(Boolean、Promise)
AntD上传组件 AntDesign VUE文档 第一种方式 beforeUpload(file) { let isLt = true if (filesSize) { isLt = file.siz ...
- 基于SqlSugar的开发框架循序渐进介绍(13)-- 基于ElementPlus的上传组件进行封装,便于项目使用
在我们实际项目开发过程中,往往需要根据实际情况,对组件进行封装,以更简便的在界面代码中使用,在实际的前端应用中,适当的组件封装,可以减少很多重复的界面代码,并且能够非常简便的使用,本篇随笔介绍基于El ...
随机推荐
- Jquery遍历复选框选中项
var ret=''; $('name=chkIds').each(function(){ if($(this).is(':checked')){ ret+=$(this).val()+','; } ...
- FreeRTOS-04-内核控制函数+时间管理函数
说明 本文仅作为学习FreeRTOS的记录文档,作为初学者肯定很多理解不对甚至错误的地方,望网友指正. FreeRTOS是一个RTOS(实时操作系统)系统,支持抢占式.合作式和时间片调度.适用于微处理 ...
- python中map()和reduce()的使用
map() 会根据提供的函数对指定序列做映射.map(function, iterable, ...)Python 3.x 返回迭代器.print(map()) 返回迭代器地址一般和list一起用 才 ...
- 基于CAS实现SSO单点登录
1. 概述 1.1. 什么是SSO? 单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要 登录一 ...
- XCTF-Web进阶-upload1
显然是让我们上传文件,思路当然是上传一个木马文件,然后通过蚁剑连接查看目录获取flag. 但是当我们想要上传php文件的时候会出现弹窗,并且连"上传"按钮都被禁用了. ext = ...
- 跟我一起写 Makefile(三)
Makefile 总述 ------- 一.Makefile里有什么? Makefile里主要包含了五个东西:显式规则.隐晦规则.变量定义.文件指示和注释. 1.显式规则.显式规则说明了,如何生成一个 ...
- TextLineCodecFactory笔记
Mina的TextLineCodecFactory将字符串编码为字节流,将字节流解码为字符串,下面是使用中遇到的两个问题. TextLineCodecFactory改变了message的类型 acce ...
- Tomcat进程意外退出的问题分析
http://ifeve.com/why-kill-2-cannot-stop-tomcat/?tdsourcetag=s_pctim_aiomsg tail后关掉客户端 正常执行shutdown.s ...
- Java课程设计 SSM新闻资讯管理系统 博客论坛管理系统 Java编程 博客系统源代码
注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java后台框架:SSM(Spring+SpringMVC+Mybatis)前端技术:HTML+CSS+JavaScri ...
- Shell-10-标准输入输出错误
标准输入输出和错误 标准输入.输出和错误 重定向符号 示例 1 1 标准输出 2 错误输出 2 标准输出和错误输出同时定向到一个文件中 >share.txt 2>&1 3 > ...