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 相关文章推荐
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
Oct 17 Javascript
最新优化收藏到网摘代码(digg,diigo)
Feb 07 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
Apr 27 Javascript
Javascript 多物体运动的实现
Dec 24 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
May 04 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
Jun 08 Javascript
Bootstrap table表格简单操作
Feb 07 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
Nov 23 Javascript
JavaScript indexOf()原理及使用方法详解
Jul 09 Javascript
JavaScript this指向相关原理及实例解析
Jul 10 Javascript
Angular利用HTTP POST下载流文件的步骤记录
Jul 26 Javascript
详解JavaScript类型判断的四种方法
Oct 21 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
解析csv数据导入mysql的方法
2013/07/01 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
javascript中call,apply,bind函数用法示例
2016/12/19 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
2017/10/31 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
python编写微信公众号首图思路详解
2019/12/13 Python
tornado+celery的简单使用详解
2019/12/21 Python
Python3 main函数使用sys.argv传入多个参数的实现
2019/12/25 Python
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
乌克兰在线药房:Аптека24
2019/10/30 全球购物
某公司面试题
2012/03/05 面试题
室内设计专业个人的自我评价
2013/10/19 职场文书
致接力运动员广播稿
2014/02/17 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
《识字五》教学反思
2014/03/01 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
JVM之方法返回地址详解
2022/02/28 Java/Android
JavaScript实现简单的音乐播放器
2022/08/14 Javascript