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 相关文章推荐
文本加密解密
Jun 23 Javascript
jquery showModelDialog的使用方法示例详解
Nov 19 Javascript
JavaScript实现简单图片翻转的方法
Apr 17 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
Boostrap模态窗口的学习小结
Mar 28 Javascript
ES6新特征数字、数组、字符串
Oct 01 Javascript
JS对大量数据进行多重过滤的方法
Nov 04 Javascript
vue实现条件叠加搜索的解决方法
May 28 Javascript
vue的三种图片引入方式代码实例
Nov 19 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
Feb 14 Javascript
微信小程序中target和currentTarget的区别小结
Nov 06 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 变量未定义等错误的解决方法
2011/01/12 PHP
ThinkPHP采用模块和操作分析
2011/04/18 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
CCPry JS类库 代码
2009/10/30 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
JavaScript 学习笔记(四)
2009/12/31 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
javascript如何写热点图
2015/12/08 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
JQuery点击行tr实现checkBox选中的简单实例
2016/05/26 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
Python3遍历目录树实现方法
2015/05/22 Python
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
python版本的读写锁操作方法
2016/04/25 Python
pycharm远程调试openstack代码
2017/11/21 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
Python切图九宫格的实现方法
2019/10/10 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
python实现图像全景拼接
2020/03/27 Python
详解Python模块化编程与装饰器
2021/01/16 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
2014年乡镇安全生产工作总结
2014/12/02 职场文书
夏洛特的网观后感
2015/06/15 职场文书
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL