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 ajax 同步异步的执行示例代码
Jun 23 Javascript
提高jQuery性能的十个诀窍
Nov 14 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
Dec 16 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
Nov 20 Javascript
JSON与XML优缺点对比分析
Jul 17 Javascript
javascript中的作用域和闭包详解
Jan 13 Javascript
jQuery与JS加载事件用法分析
Sep 04 Javascript
JS ES6多行字符串与连接字符串的表示方法
Apr 26 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
Aug 17 Javascript
JavaScript 自定义事件之我见
Sep 25 Javascript
VUE实时监听元素距离顶部高度的操作
Jul 29 Javascript
vue自定义组件实现双向绑定
Jan 13 Vue.js
微信小程序解除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
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
JavaScript 的继承
2011/10/01 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
基于JQuery的Ajax方法使用详解
2017/08/16 jQuery
JS设计模式之单例模式(一)
2017/09/29 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
angularJS开发注意事项
2018/05/26 Javascript
详解vue中axios的封装
2018/07/18 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
python计算时间差的方法
2015/05/20 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
Python字符串格式化输出代码实例
2019/11/22 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
了解AppleTalk协议吗
2014/04/01 面试题
理工科学生的自我评价
2013/12/15 职场文书
火车的故事教学反思
2014/02/11 职场文书
学校课外活动总结
2014/05/08 职场文书
食品安全演讲稿
2014/09/01 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python
CSS极坐标的实例代码
2021/06/03 HTML / CSS