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 相关文章推荐
ExtJS中设置下拉列表框不可编辑的方法
May 07 Javascript
JS实现仿苹果底部任务栏菜单效果代码
Aug 28 Javascript
Jquery ajax基础教程
Nov 20 Javascript
初步使用Node连接Mysql数据库
Mar 03 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
Jun 06 Javascript
利用JS实现简单的日期选择插件
Jan 23 Javascript
JavaScript设计模式之代理模式详解
Jun 09 Javascript
说说AngularJS中的$parse和$eval的用法
Sep 14 Javascript
详解javascript 正则表达式之分组与前瞻匹配
May 30 Javascript
vue中typescript装饰器的使用方法超实用教程
Jun 17 Javascript
vue3 源码解读之 time slicing的使用方法
Oct 31 Javascript
基于jquery实现彩色投票进度条代码解析
Aug 26 jQuery
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将进程作为守护进程的方法
2015/03/19 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
2016/06/29 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
2013/02/05 Javascript
js取得url地址参数实例
2013/02/22 Javascript
js设置文本框中焦点位置在最后的示例代码(简单实用)
2014/03/04 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
2018/05/15 NodeJs
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
js实现缓动动画
2020/11/25 Javascript
详解python的几种标准输出重定向方式
2016/08/15 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
Django 外键的使用方法详解
2019/07/19 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
python中自带的三个装饰器的实现
2019/11/08 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
绘儿乐产品官方在线商店:Crayola.com
2019/09/07 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
基层工作经验证明样本
2014/11/16 职场文书
工作失职自我检讨书
2015/05/05 职场文书
干部培训简讯
2015/07/20 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书