antd组件Upload实现自己上传的实现示例


Posted in Javascript onDecember 18, 2018

前言

在实现图片上传时,可能需要用到Upload,但是它默认的上传方式是加入图片后直接上传,如果要实现最后再一次性上传,需要自定义内容。

antd组件Upload实现自己上传的实现示例antd组件Upload实现自己上传的实现示例

//添加按钮的样式
const uploadButton = (
  <div>
  <Icon type="plus" />
  <div className="ant-upload-text">Upload</div>
  </div>
 );


<Upload
    //样式
    className={styles['override-ant-btn']}
    //陈列样式,现在是卡片式
    listType="picture-card"
    //再图片上传到页面后执行的函数,自定义让他不执行
    beforeUpload={() => false}
    //数据,即图片,是一个数组
    fileList={fileList}
    //当点击查看时调用(上图的那个眼睛)
    onPreview={this.handlePreview}
    //数据改变时调用
    onChange={this.handleChange}
   >
    //当不少于一张图时,不显示怎加图片的按钮。
    {fileList.length >= 1 ? null : uploadButton}
   </Upload>

还有一个移除时调用的函数onRemove(),即点击上图的垃圾桶,这里没有定义。

handlePreview = (file) => {
 this.setState({
  previewImage: file.url || file.thumbUrl,
  visible: true,
 });
 };


  <Modal visible={visible} footer={null} onCancel={this.handleCancel}>
    <img alt="加载" style={{ width: '100%',height: '100%' }} src={previewImage} />
  </Modal>

利用Modal显示图片。

handleChange = ({ fileList }) => {
 this.setState({ fileList });
};

数据改变时直接重设fileList数组的值(我这里只有一张图可以这么做)。

最后是fileList的一些基本设置:

fileList: [{
   uid: 'id',
   name: '标题',
   //目前的状态
   status: 'done',
   //图片的url或者base64
   url: '',
   type: 'image/jpeg',
  }],

PS:基于antd的上传文件进度条

核心代码

//通过前端原生XMLHttpRequest动态获取上传文件进度
doTransferFile = (file) => {
 let mySelf = this;
 let formData = new FormData();
 let url = "http://xxx:444/upload_file.php";
 let file = document.getElementById("chooseFile").files[0];
 console.log(file)
 
 formData.append("file",file);
 // console.log(modal);
 // console.log(formData);
 // return false;
 /* eslint-disable */
 $.ajax({ 
  url : url, 
  type : 'POST',
  enctype: 'multipart/form-data',
  data : formData, 
  // 告诉jQuery不要去处理发送的数据
  processData : false, 
  // 告诉jQuery不要去设置Content-Type请求头
  contentType : false,
  timeout : 60000,//设置超时时间
  beforeSend:function(){
   console.log("现在开始上传文件!");
 notification['info']({
 message: '提示',
 description: '现在开始上传文件!',
 });
  },
  xhr: function(){
 let myXhr = $.ajaxSettings.xhr();
 // console.log(myXhr)
 if(myXhr.upload){
 myXhr.upload.addEventListener('progress',function(e) {
  if (e.lengthComputable) {
  let percent = Math.floor((e.loaded/e.total)*100);
  // console.log(e.loaded)
  // console.log(e.total)
  console.log(percent)
  let upload = mySelf.state.upload;
  upload.progress.loaded = e.loaded;
  upload.progress.total = e.total;
  upload.progress.percentage = percent;
  mySelf.state.upload = upload;
 
  // console.log(info);
   mySelf.setState({
    upload: upload
   });
  }
 },false);
 
 myXhr.upload.addEventListener('load',function(e) {
  console.log('fish')
 },false);
 
 }
 return myXhr;
  },
  success : function(res) {
   console.log(res)
 
  }, 
  error : function(res) { 
 
  } 
 });
};

在antd框架下,调用的Progress组件动态展示的上传文件进度,效果图如下,待全部上传成功后,由接口返回上传文件的大小,路径等信息,render到页面上

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript &amp; DHTML 实例编程(教程)基础知识
Jun 02 Javascript
Javascript结合css实现网页换肤功能
Nov 02 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
Aug 27 Javascript
JS实现自定义简单网页软键盘效果代码
Nov 05 Javascript
jQuery常用的一些技巧汇总
Mar 26 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
Nov 22 Javascript
微信小程序表单验证form提交错误提示效果
Jun 19 Javascript
vuex actions传递多参数的处理方法
Sep 18 Javascript
vue.extend与vue.component的区别和联系
Sep 19 Javascript
原生JS实现逼真的图片3D旋转效果详解
Feb 16 Javascript
layui添加动态菜单与选项卡
Jul 26 Javascript
通过实例解析JavaScript常用排序算法
Sep 02 Javascript
微信小程序解除10个请求并发限制
Dec 18 #Javascript
vue项目中axios请求网络接口封装的示例代码
Dec 18 #Javascript
vue中引入第三方字体文件的方法示例
Dec 17 #Javascript
vue 表单验证按钮事件交由父组件触发的方法
Dec 17 #Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
Dec 17 #Javascript
vuex 解决报错this.$store.commit is not a function的方法
Dec 17 #Javascript
详解Vue This$Store总结
Dec 17 #Javascript
You might like
php中CI操作多个数据库的代码
2012/07/05 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
php-msf源码详解
2017/12/25 PHP
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
[47:55]Ti4第二日主赛事败者组 NaVi vs EG 1
2014/07/20 DOTA
python函数形参用法实例分析
2015/08/04 Python
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
2018/01/15 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
鱼油专家:Omegavia
2016/10/10 全球购物
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
你们项目是如何进行变更控制的
2015/08/26 面试题
医学专业毕业生推荐信
2013/11/14 职场文书
庆中秋节主题活动方案
2014/02/03 职场文书
土地转让协议书范本
2014/04/15 职场文书
环保标语口号
2014/06/13 职场文书
合作协议书模板
2014/10/10 职场文书
社区党建工作总结2015
2015/05/13 职场文书
大学生读书笔记大全
2015/07/01 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书