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

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

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

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. 重学 Java 设计模式:实战责任链模式「模拟618电商大促期间,项目上线流程多级负责人审批场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 场地和场景的重要性 射击

  2. tarjan算法求scc & 缩点

    前置知识 图的遍历(dfs) 强连通&强连通分量 对于有向图G中的任意两个顶点u和v存在u->v的一条路径,同时也存在v->u的路径,我们则称这两个顶点强连通.以此类推,强连通分量 ...

  3. ssh生成单个公钥

    ssh生成单个公钥命令: ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 查看公钥: cat ~/.ssh/id_rsa ...

  4. Spring事务方法上增加synchronized真的有效果吗?

    此文转载,Spring事务本身是一个非常复制的问题,再加上线程并发处理就更加要主要了,由于再开发中有很多朋友会范与下文同样的错误,因分享给大家. 前言 Spring事务的一个奇怪的问题. 朋友问了我一 ...

  5. PHPWord中文乱码、单元格合并、动态表格模板解决方案合集

    摘要:  最近一个项目开发要用到PHP技术导出Word文档,采用PHPWord插件,版本为0.6.2 beta,CodePlex已停止维护.网上还有另外一个版本的PhpWord,项目类名大小写上略有不 ...

  6. 黎活明8天快速掌握android视频教程--23_网络通信之网络图片查看器

    1.首先新建立一个java web项目的工程.使用的是myeclipe开发软件 图片的下载路径是http://192.168.1.103:8080/lihuoming_23/3.png 当前手机和电脑 ...

  7. 关于 urlencode 的使用和 json 模块的介绍

    先附上一段 “百度翻译” 的爬虫代码 # python爬虫实现百度翻译 # urllib和request POST参数提交 from urllib import request,parse impor ...

  8. html+css快速入门教程(2)

    3 标签 3.1 div div 标签表示一个区块或者区域,你可以把它看成是一个容器,比如说一个 竹篮 作用:用来把网页分块 并且里面可以装任意的html元素 <div>这里是一个div容 ...

  9. 【部分】ASP.NET MVC5 - 地址栏传参两种方法

    地址栏传参两种方法 1-  Home/Index/88       (后台控制器读取需要一样的参数名称) 2-  Home/Index?id1=88?id2=99    (Request三种接受方法) ...

  10. valueOf()、toString()

    基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题. JavaScript 的 valueOf() 方法 valu ...