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 相关文章推荐
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
Apr 27 Javascript
js原型链原理看图说明
Jul 07 Javascript
js判断变量是否未定义的代码
Mar 28 Javascript
jQuery固定浮动侧边栏实现思路及代码
Sep 28 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
Nov 10 Javascript
简单实现js放大镜效果
Jul 24 Javascript
深入浅析ES6 Class 中的 super 关键字
Oct 20 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
May 04 jQuery
详解利用eventemitter2实现Vue组件通信
Nov 04 Javascript
vue 获取元素额外生成的data-v-xxx操作
Sep 09 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
Sep 21 Javascript
echarts浮动显示单位的实现方法示例
Dec 04 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中count获取多维数组长度的方法
2014/11/03 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
JavaScript 学习笔记之基础中的基础
2015/01/13 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
python的id()函数解密过程
2012/12/25 Python
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
kali中python版本的切换方法
2019/07/11 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
学术会议主持词
2014/03/17 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
个人委托书范本汇总
2014/10/01 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
会计简历自我评价
2015/03/10 职场文书