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 相关文章推荐
Locate a File Using a File Open Dialog Box
Jun 18 Javascript
js 实现菜单左右滚动显示示例介绍
Nov 21 Javascript
JS在IE下缺少标识符的错误
Jul 23 Javascript
AngularJs  Understanding Angular Templates
Sep 02 Javascript
ASP.NET jquery ajax传递参数的实例
Nov 02 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
Feb 19 Javascript
jQuery实现动态删除LI的方法
May 30 jQuery
微信小程序实现添加手机联系人功能示例
Nov 30 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
Sep 13 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
Nov 12 Javascript
微信小程序实现下滑到底部自动翻页功能
Mar 07 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
Oct 31 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
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
php 读取shell管道传输过来的内容
2010/03/01 PHP
hessian 在PHP中的使用介绍
2010/12/13 PHP
typecho插件编写教程(五):核心代码
2015/05/28 PHP
php实现简单爬虫的开发
2016/03/28 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
js实现百度登录框鼠标拖拽效果
2017/03/07 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
Python实现抓取网页并且解析的实例
2014/09/20 Python
深入Python解释器理解Python中的字节码
2015/04/01 Python
Python 功能和特点(新手必学)
2015/12/30 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
运动会跳远加油稿
2014/02/20 职场文书
毕业生党员个人总结
2015/02/14 职场文书
2019年度开业庆典祝福语大全!
2019/07/05 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
python解析照片拍摄时间进行图片整理
2022/07/23 Python
Java Spring读取和存储详细操作
2022/08/05 Java/Android