|
@@ -183,6 +183,11 @@ export default {
|
|
|
type: [String, Number],
|
|
|
default: Number.MAX_VALUE
|
|
|
},
|
|
|
+ // 文件大小限制,单位为byte
|
|
|
+ fileMaxSize: {
|
|
|
+ type: [String, Number],
|
|
|
+ default: Number.MAX_VALUE
|
|
|
+ },
|
|
|
// 显示已上传的文件列表
|
|
|
fileList: {
|
|
|
type: Array,
|
|
@@ -198,7 +203,7 @@ export default {
|
|
|
// 是否自动上传
|
|
|
autoUpload: {
|
|
|
type: Boolean,
|
|
|
- default: true
|
|
|
+ default: false
|
|
|
},
|
|
|
// 是否显示toast消息提示
|
|
|
showTips: {
|
|
@@ -259,6 +264,15 @@ export default {
|
|
|
return ['png', 'jpg', 'jpeg', 'webp', 'gif', 'image','mp4'];
|
|
|
}
|
|
|
},
|
|
|
+ // 放一起,免得忘记了, 用于 图片上传限制, 和文件上传限制区别
|
|
|
+ fileLimitType:{
|
|
|
+ type: Array,
|
|
|
+ default() {
|
|
|
+ // 支付宝小程序真机选择图片的后缀为"image"
|
|
|
+ // https://opendocs.alipay.com/mini/api/media-image
|
|
|
+ return ['mp4'];
|
|
|
+ }
|
|
|
+ },
|
|
|
// 在各个回调事件中的最后一个参数返回,用于区别是哪一个组件的事件
|
|
|
index: {
|
|
|
type: [Number, String],
|
|
@@ -306,7 +320,7 @@ export default {
|
|
|
// 选择图片
|
|
|
selectFile() {
|
|
|
if (this.disabled) return;
|
|
|
- const { name = '', maxCount, multiple, maxSize, sizeType, lists, camera, compressed, maxDuration, sourceType } = this;
|
|
|
+ const { name = '', maxCount, multiple, maxSize, fileMaxSize, sizeType, lists, camera, compressed, maxDuration, sourceType } = this;
|
|
|
let chooseFile = null;
|
|
|
const newMaxCount = maxCount - lists.length;
|
|
|
// 设置为只选择图片的时候使用 chooseImage 来实现
|
|
@@ -331,10 +345,26 @@ export default {
|
|
|
|
|
|
// 如果是非多选,index大于等于1或者超出最大限制数量时,不处理
|
|
|
if (!multiple && index >= 1) return;
|
|
|
- if (val.size > maxSize) {
|
|
|
- this.$emit('on-oversize', val, this.lists, this.index);
|
|
|
- this.showToast('超出允许的文件大小'+(maxSize/1024/1024)+"M");
|
|
|
- } else {
|
|
|
+ console.log(this.getFileExt(val),this.fileLimitType,fileMaxSize)
|
|
|
+ var ckvalsize=true;
|
|
|
+ if (this.fileLimitType.indexOf(this.getFileExt(val))>-1) {
|
|
|
+ if(val.size > fileMaxSize){
|
|
|
+ this.$emit('on-oversize', val, this.lists, this.index);
|
|
|
+ this.showToast('超出允许的视频大小'+(fileMaxSize/1024/1024)+"M");
|
|
|
+ ckvalsize=false
|
|
|
+ }
|
|
|
+
|
|
|
+ }else {
|
|
|
+ if(val.size > maxSize) {
|
|
|
+ this.$emit('on-oversize', val, this.lists, this.index);
|
|
|
+ this.showToast('超出允许的图片大小'+(maxSize/1024/1024)+"M");
|
|
|
+ ckvalsize=false
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!ckvalsize){
|
|
|
+
|
|
|
+ }else {
|
|
|
if (maxCount <= lists.length) {
|
|
|
this.$emit('on-exceed', val, this.lists, this.index);
|
|
|
this.showToast('超出最大允许的文件个数');
|
|
@@ -560,6 +590,25 @@ export default {
|
|
|
});
|
|
|
},
|
|
|
// 判断文件后缀是否允许
|
|
|
+ getFileExt(file) {
|
|
|
+ // 检查是否在允许的后缀中
|
|
|
+ let noArrowExt = false;
|
|
|
+ // 获取后缀名
|
|
|
+ let fileExt = '';
|
|
|
+ const reg = /.+\./;
|
|
|
+ // 如果是H5,需要从name中判断
|
|
|
+ // #ifdef H5
|
|
|
+ fileExt = file.name.replace(reg, "").toLowerCase();
|
|
|
+ // #endif
|
|
|
+ // 非H5,需要从path中读取后缀
|
|
|
+ // #ifndef H5
|
|
|
+ fileExt = file.path.replace(reg, "").toLowerCase();
|
|
|
+ // #endif
|
|
|
+ // 使用数组的some方法,只要符合limitType中的一个,就返回true
|
|
|
+
|
|
|
+ return fileExt;
|
|
|
+ },
|
|
|
+ // 判断文件后缀是否允许
|
|
|
checkFileExt(file) {
|
|
|
// 检查是否在允许的后缀中
|
|
|
let noArrowExt = false;
|