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内容过滤选择器选择元素实例讲解
Apr 18 Javascript
js中的referrer返回上一页使用介绍
Sep 26 Javascript
JS弹出层单纯的绝对定位居中示例代码
Feb 18 Javascript
防止按钮在短时间内被多次点击的方法
Mar 10 Javascript
对之前写的jquery分页做下升级
Jun 19 Javascript
javascript折半查找详解
Jan 26 Javascript
javascript实现移动端上的触屏拖拽功能
Mar 04 Javascript
浅谈js中的引用和复制(传值和传址)
Sep 18 Javascript
JavaScript实现时钟滴答声效果
Jan 29 Javascript
jQuery取得元素标签名称小结(附代码)
Aug 16 jQuery
微信小程序云开发之云函数详解
May 16 Javascript
JS实现炫酷轮播图
Nov 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
自己做矿石收音机
2021/03/02 无线电
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
利用jQuery操作对象数组的实现代码
2011/04/27 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
2018/03/17 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
python实现感知器算法详解
2017/12/19 Python
python定时关机小脚本
2018/06/20 Python
python将txt文件读取为字典的示例
2018/12/22 Python
python读取csv和txt数据转换成向量的实例
2019/02/12 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
建筑工程技术应届生求职信
2013/11/17 职场文书
工作过失检讨书
2014/02/23 职场文书
活动总结新闻稿
2014/08/30 职场文书
防火标语大全
2014/10/06 职场文书
党员思想汇报材料
2014/12/19 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
趣味运动会广播稿
2015/08/19 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python