用表单上传组件最痛苦的地方是:

他的诸多行为与纯上传组件不一样,而表单的文档关于这一块基本上没有提,只能自己试。

比如我想做一个上传前的拦截。

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实战:表单上传,文件列表的过滤与限制。的更多相关文章

  1. 巨蟒python全栈开发django11:ajax&&form表单上传文件contentType

    回顾: 什么是异步? 可以开出一个线程,我发出请求,不用等待返回,可以做其他事情. 什么是同步? 同步就是,我发送出了一个请求,需要等待返回给我信息,我才可以操作其他事情. 局部刷新是什么? 通过jq ...

  2. JsonResponse类的使用、form表单上传文件补充、CBV和FBV、HTML的模板语法之传值与过滤器

    昨日内容回顾 Django请求生命周期 # 1.浏览器发起请求 到达Django的socket服务端(web服务网关接口) 01 wsgiref 02 uwsgi + nginx 03 WSGI协议 ...

  3. django 基于form表单上传文件和基于ajax上传文件

    一.基于form表单上传文件 1.html里是有一个input type="file" 和 ‘submit’的标签 2.vies.py def fileupload(request ...

  4. java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例

    java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...

  5. Express下使用formidable实现POST表单上传文件并保存

    Express下使用formidable实现POST表单上传文件并保存 在上一篇文章中使用formidable实现了上传文件,但没将它保存下来. 一开始,我也以为是只得到了文件的相关信息,需要用fs. ...

  6. vue form表单上传文件

    <script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js">< ...

  7. 使用form表单上传文件

    在使用form表单上传文件时候,input[type='file']是必然会用的,其中有一些小坑需要避免. 1.form的 enctype="multipart/form-data" ...

  8. from 表单上传文件和下载?

    from表单上传单个文件的方法. 分为三个部分,简单演示. 一部分 表单上传文件 <%-- Created by IntelliJ IDEA. User: Administrator Date: ...

  9. Linux 基础命令-CURL 表单上传文件

    CURL -F, --form <name=content> (HTTP) This lets curl emulate a filled-in form in which a user ...

  10. 一个ajax实现表单上传文件的神器 formdata

    通过传统的form表单提交的方式上传文件: $.ajax({ url : "http://localhost:8080/STS/rest/user", type : "P ...

随机推荐

  1. Web前端 -- Webpack

    一.Webpack Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 二.Webpack安装 1.全局安装 npm i ...

  2. ASP.NET WebAPI框架解析第一篇

    ASP.NET WebAPI有两种寄宿模式,一种是WebHost,一种是SelfHost,为什么可以有两种模式的原因在于WebAPI有一个相对独立的消息处理管道,只要给这个消息管道传递一个封装好的对象 ...

  3. .NETCore微服务探寻(二) - 认证与授权

    前言 一直以来对于.NETCore微服务相关的技术栈都处于一个浅尝辄止的了解阶段,在现实工作中也对于微服务也一直没有使用的业务环境,所以一直也没有整合过一个完整的基于.NETCore技术栈的微服务项目 ...

  4. 15.DRF-分页

    Django rest framework(6)----分页 第一种分页 PageNumberPagination 基本使用 (1)urls.py urlpatterns = [ re_path('( ...

  5. webstom 汉化,激活

    1.激活 本地服务器激活: 下载 magnet:?xt=urn:btih:2289E4F8CEB346AC44E54C8C0DA706CC537301AA 得到一个压缩包IntelliJIDEALic ...

  6. Nginx 从入门到放弃(四)

    前面我们学习了nginx的基本操作和日志管理,今天我们学习一下生产环境经常会用到的路由定位location设置,在工作中,经常可能会出现怎么设置的路由访问不到网页呀?总是出现404错误啊,这些都很有可 ...

  7. models.py连接mysql

    安装pymysql: other setting---project Interpreter---+pymysql 更改数据库 在项目名的同名文件下的settings.py中DATABASES,改成 ...

  8. java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized

    idea数据库连接字符串需要添加一些参数: ?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai ...

  9. 阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP) 并发调试之MySQL配置

    mysql高并发配置 要在mysqld下设置 1. 修改back_log参数值:由默认的50修改为500.(每个连接256kb,占用:125M) back_log=500 back_log值指出MyS ...

  10. 如何基于 echarts 实现区间柱状图(包括横向)?

    目录 需求 借鉴 echarts 的 demo 最终实现思路 实现效果 遇到的问题: 代码映射 源码 最后 始终如一 需求 需要利用 echarts 实现区间柱状图,效果如下: 效果来源于:g2-柱状 ...