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 相关文章推荐
jquery select选中的一个小问题
Oct 11 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
Aug 09 Javascript
jquery异步跨域访问代码
Jun 28 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
Nov 30 Javascript
javascript数字时钟示例分享
Apr 23 Javascript
使用documentElement正确取得当前可见区域的大小
Jul 25 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
Aug 27 Javascript
JavaScript中三种异步上传文件方式
Mar 06 Javascript
JS去除字符串中空格的方法
Feb 14 Javascript
vue 使用外部JS与调用原生API操作示例
Dec 02 Javascript
微信小程序swiper实现文字纵向轮播提示效果
Jan 21 Javascript
JavaScript 防篡改对象的用法示例
Apr 24 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
B2K与车机的中波PK
2021/03/02 无线电
解析htaccess伪静态的规则
2013/06/18 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
node.js中watch机制详解
2014/11/17 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
基于javascript制作经典传统的拼图游戏
2016/03/22 Javascript
js实现文字截断功能
2016/09/14 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
python二分法实现实例
2013/11/21 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
python常用排序算法的实现代码
2019/11/08 Python
python 调试冷知识(小结)
2019/11/11 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
Python 如何测试文件是否存在
2020/07/31 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
推普周活动总结
2014/08/28 职场文书
人事任命通知书
2015/04/21 职场文书
学校德育工作总结2015
2015/05/11 职场文书
天鹅湖观后感
2015/06/09 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书