antd实战:表单上传,文件列表的过滤与限制。
用表单上传组件最痛苦的地方是:
他的诸多行为与纯上传组件不一样,而表单的文档关于这一块基本上没有提,只能自己试。
比如我想做一个上传前的拦截。
beforeUpload: (file, fileList) => {
const isJpgOrPng =
file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/jpg';
if (!isJpgOrPng) {
message.error('您只能上传JPG或PNG图片');
return false;
}
const isLt2M = file.size / 1024 / 1024 < 10;
if (!isLt2M) {
message.error('您的图片大于10M,请重新上传');
return false;
}
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
this.setState({
logoUrl: reader.result,
});
};
},
这个代码在一般的上传是有效的,但是表单上传就不行。
因为,就算你 return false 了,这个文件还是会进文件列表!
所以只能在包裹上传组件的表单组件上动脑子了。
HTML:
<FormItem>
{getFieldDecorator(`upload_logo`, {
initialValue: undefined,
valuePropName: 'fileList',
getValueFromEvent: this.normFile,
})(
<Upload {...this.uploadLogoProps}>
<div
className={styles.logoBtn}
style={{ cursor: 'pointer' }}
><button>
点击上传图片
<div className={styles.pos}>
<Icon type="plus" />
</div>
</button></div>
</Upload>,
)}
</FormItem>
JS:
// 上传控件用方法 LOGO
// 项目照片只需要 1 个
normFile = e => {
let limit = 1;
if (Array.isArray(e)) {
return e;
}
return (
e &&
e.fileList &&
e.fileList
.filter((item, index, arr) => {
return !!item.status;
})
.filter((item, index, arr) => {
return index > arr.length - (limit + 1);
})
);
};
通过 status 的判断把没有上传的文件过滤掉。
另外这个代码还做了另外一件事:
.filter((item, index, arr) => {
return index > arr.length - (limit + 1);
})
通过这个方法,让文件数组里只有一个文件对象。
再次上传时,旧的会被新的顶掉。
以上。
antd实战:表单上传,文件列表的过滤与限制。的更多相关文章
- 巨蟒python全栈开发django11:ajax&&form表单上传文件contentType
回顾: 什么是异步? 可以开出一个线程,我发出请求,不用等待返回,可以做其他事情. 什么是同步? 同步就是,我发送出了一个请求,需要等待返回给我信息,我才可以操作其他事情. 局部刷新是什么? 通过jq ...
- JsonResponse类的使用、form表单上传文件补充、CBV和FBV、HTML的模板语法之传值与过滤器
昨日内容回顾 Django请求生命周期 # 1.浏览器发起请求 到达Django的socket服务端(web服务网关接口) 01 wsgiref 02 uwsgi + nginx 03 WSGI协议 ...
- django 基于form表单上传文件和基于ajax上传文件
一.基于form表单上传文件 1.html里是有一个input type="file" 和 ‘submit’的标签 2.vies.py def fileupload(request ...
- java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例
java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...
- Express下使用formidable实现POST表单上传文件并保存
Express下使用formidable实现POST表单上传文件并保存 在上一篇文章中使用formidable实现了上传文件,但没将它保存下来. 一开始,我也以为是只得到了文件的相关信息,需要用fs. ...
- vue form表单上传文件
<script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js">< ...
- 使用form表单上传文件
在使用form表单上传文件时候,input[type='file']是必然会用的,其中有一些小坑需要避免. 1.form的 enctype="multipart/form-data" ...
- from 表单上传文件和下载?
from表单上传单个文件的方法. 分为三个部分,简单演示. 一部分 表单上传文件 <%-- Created by IntelliJ IDEA. User: Administrator Date: ...
- Linux 基础命令-CURL 表单上传文件
CURL -F, --form <name=content> (HTTP) This lets curl emulate a filled-in form in which a user ...
- 一个ajax实现表单上传文件的神器 formdata
通过传统的form表单提交的方式上传文件: $.ajax({ url : "http://localhost:8080/STS/rest/user", type : "P ...
随机推荐
- Python中用OpenPyXL处理Excel表格 - 单元格格式设置
官方文档: http://openpyxl.readthedocs.io/en/default/ OpenPyXL库 --单元格样式设置 单元格样式的控制,依赖openpyxl.style包,其中定义 ...
- Linux性能优化思路
性能测试的核心,就是找出性能瓶颈并进行性能优化,解决"慢"的问题,最终满足客户业务需求. [性能需求来源及性能问题现象] 性能需求的来源,主要分为以下几类: 项目组提出性能需求: ...
- Java 中的线程 thread
一.问:线程有哪些状态? new, runnable, running, waiting, dead 线程状态间的流转 二.问:线程实现方式? 实现 Runnable 接口,然后new Thread, ...
- Centos7下的MySQL5.6安装
yum install wget yum install perl perl-devel cd /usr/local/src wget https://cdn.mysql.com//Downloads ...
- linux 上设置mysql开机自启
此方式是通过安装包安装的,如果是yum安装的rpm包,可参考yum安装MySQL8.0 三个月之前安装的mysql,记得是设置了开机自启,但是今天再次进入的时候发现,无法登录,报错如下 原因是mysq ...
- Perl入门(三)Perl的数组
Perl数组的声明方式 Perl使用"@"符号声明一个数组:@array: 使用"()"或"qw()"声明数组中元素: 一个完整的声明方式为 ...
- elasticSearch数据库、skywalking集群部署
Centos6上面安装elasticsearc数据库的集群 安装的是6.3.2版本,安装之前首先要先安装jdk1.8版本 安装之前首先需要关闭防火墙 Centos6 sudo service ipta ...
- android 中使用自定义权限
1.如果在一个进程中启动另外一个进程的activity <?xml version="1.0" encoding="utf-8"?> <man ...
- java8 Optional 类
package jdk180reduce; import java.util.ArrayList; import java.util.HashMap; import java.util.List; i ...
- java集合--模拟斗地主发牌洗牌
import java.util.*; /** * @Date: 2020/6/17 19:53 */public class Test04 { public static void main(Str ...