antd Upload 文件上传的示例代码


Posted in Javascript onDecember 14, 2018

1.antd官网Upload组件:

https://ant.design/components/upload-cn/

2.下图是最近开发的上传文档的效果:

antd Upload 文件上传的示例代码

3.文件上传的实现:

(1)方法一:antd默认上传。

a:渲染文件上传组件。getPDFURL()方法为实现文件的上传。showUploadList为是否展示 uploadList, true显示,false不显示,其可设为一个对象,用于单独设定 showPreviewIcon 和 showRemoveIcon。type为上传按钮的图标。如下图所示。

{/* 渲染文件上传组件 */}
 <Upload {...this.getPdfURL()} showUploadList={false}>
  <Button>
  <Icon type="upload" /> 上传文件
  </Button>
 </Upload>

b:getPDFURL()方法为实现文件的上传。name是发到后台的文件参数名。action为上传文件的地址。accept是接受上传的文件类型。headers是设置上传的请求头部,IE10 以上有效。onChange是上传文件改变时的状态。代码如下图所示。

antd Upload 文件上传的示例代码

下面为代码:

getPdfURL = () =>{
  const _this = this;
  const props = {
   name: 'file',
   action: AjaxUrl + 'data/modelFileUpload.svt?cou_id=' + this.state.cou_id,{/*文件上传接口和需要的传参*/}
   accept:"application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document",{/*接受上传的文件类型:此处为.doc格式*/}
   headers: {
    authorization: 'authorization-text',
   },
   onChange(info) {//上传文件改变时的状态
    if (info.file.status !== 'uploading') {
     console.log(info.file, info.fileList);
    }
    if (info.file.status === 'done') {
     message.success(`${info.file.name} 上传成功!`);
     _this.setState({
      pdfUrl:AjaxUrl + info.file.response.url,
      wordName:info.file.response.wordName
     })
 
    } else if (info.file.status === 'error') {
     message.error(`${info.file.name} 上传失败!`);
    }
   },
  };
  return props;
 }

注意:accept可以用于设置接口不同类型的文件类型

(2)方法二:使用customRequest通过覆盖默认的上传行为,自定义自己的上传实现。

a:渲染文件上传组件。accept是接受上传的文件类型。customRequest通过覆盖默认的上传行为,customRequest()方法是自定义自己的上传实现。fileList是已经上传的文件列表(受控)。

<Upload
  accept="application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document"
  customRequest={this.customRequest}
  beforeUpload = {this.beforeUpload}
  fileList={this.state.fileList}
    >
  <Button>
  <Icon type='upload' />上传
  </Button>
</Upload>

b:customRequest()方法是自定义自己的上传实现。 

customRequest = (option)=> {
   const formData = new FormData();
   const fileUrl = AjaxUrl+"data/fileUpload.svt";
   formData.append('files[]',option.file);
   
   reqwest({ /*官网解释:It's AJAX
      All over again. Includes support
      for xmlHttpRequest, JSONP, CORS,
       and CommonJS Promises A.*/
   url: fileUrl,
   method: 'post',
   processData: false,
   data: formData,
   success: (res) => {
    //res为文件上传成功之后返回的信息,res.responseText为接口返回的值
    let fileInfo = JSON.parse(res.responseText);
    if(res){
    this.setState({
     fileInfo:fileInfo,
     loading: false,
     uploading: false,
     defaultFile:false
    })
    }
    
   },
   error: () => {
    this.setState({
     loading: false,
     uploading: false
    })
    message.error("文件上传失败!");
   },
   });
  }

antd Upload 文件上传的示例代码

注意:reqwest其实就是ajax异步请求。更多了解参考: https://www.npmjs.com/package/reqwest

antd的upload组件上传功能踩坑

在初次使用upload组件上传文件时,出现了几个风格各异的bug,因此做一个记录

错误的起源

使用upload组件的自动上传方式,上传到项目后台fdfs接口,结果浏览器报错,报405错误

使用form表单和input元素进行原生JS提交

提交到相同接口,只是报跨域错误,并没有发生405错误

更改接口接收文件

这时决定不使用fdfs接口接收文件,后台同事重新提供一个后台接口。但是出现了新的问题。

新的问题 后台只接收单个文件 不接受数组形式的文件列表

这个应该是后台的原因,但是后台没有找到解决方法,于是从前端使用一个折衷办法,获取filelist后遍历list,重复添加file字段到FormData对象

fileList.forEach((value,index)=>{
 formData.append("file",value)
})

说明:上述内容均是自己在开发过程中总结出来,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
修复ie8&amp;chrome下window的resize事件多次执行
Oct 20 Javascript
Js中获取frames中的元素示例代码
Jul 30 Javascript
ExtJS[Desktop]实现图标换行示例代码
Nov 17 Javascript
javascript列表框操作函数集合汇总
Nov 28 Javascript
Javascript实现div层渐隐效果的方法
May 30 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
Sep 28 Javascript
微信小程序 天气预报开发实例代码源码
Jan 20 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
Oct 13 Javascript
教你用Cordova打包Vue项目的方法
Oct 17 Javascript
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
基于element-ui的rules中正则表达式
Sep 04 Javascript
用Angular实现一个扫雷的游戏示例
May 15 Javascript
Vue源码解析之Template转化为AST的实现方法
Dec 14 #Javascript
JavaScript模板引擎实现原理实例详解
Dec 14 #Javascript
Angular2 自定义表单验证器的实现方法
Dec 14 #Javascript
JavaScript模板引擎应用场景及实现原理详解
Dec 14 #Javascript
详解React 服务端渲染方案完美的解决方案
Dec 14 #Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
Dec 14 #Javascript
JS实现的A*寻路算法详解
Dec 14 #Javascript
You might like
php代码书写习惯优化小结
2013/06/20 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
浅谈Python中函数的参数传递
2016/06/21 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
python实现的自动发送消息功能详解
2019/08/15 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
python 贪心算法的实现
2020/09/18 Python
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
市场部专员岗位职责
2013/11/30 职场文书
融资租赁计划书
2014/04/29 职场文书
2014办公室副主任四风对照检查材料思想汇报
2014/09/20 职场文书
东京审判观后感
2015/06/01 职场文书
python playwright 自动等待和断言详解
2021/11/27 Python