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 相关文章推荐
基于jquery的Repeater实现代码
Jul 17 Javascript
javascript改变position值实现菜单滚动至顶部后固定
Jan 18 Javascript
javascript折半查找详解
Jan 26 Javascript
javascript实现简单的页面右下角提示信息框
Jul 31 Javascript
原生JS获取元素集合的子元素宽度实例
Dec 14 Javascript
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
jQuery开源组件BootstrapValidator使用详解
Jun 29 jQuery
vue项目中在外部js文件中直接调用vue实例的方法比如说this
Apr 28 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
Sep 26 Javascript
JS实现json数组排序操作实例分析
Oct 28 Javascript
BootstrapValidator验证用户名已存在(ajax)
Nov 08 Javascript
vue随机验证码组件的封装实现
Feb 19 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使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
python用来获得图片exif信息的库实例分析
2015/03/16 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
Python延时操作实现方法示例
2018/08/14 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
啤酒销售实习自我鉴定
2013/09/24 职场文书
体育教师个人的自我评价
2014/02/16 职场文书
公司请假条范文
2014/04/11 职场文书
供货协议书范本
2014/04/22 职场文书
公司踏青活动方案
2014/08/16 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
数学教师个人总结
2015/02/06 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
2016年父亲节寄语
2015/12/04 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书