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 相关文章推荐
再谈javascript 动态添加样式规则 W3C校检
Dec 25 Javascript
情人节之礼 js项链效果
Feb 13 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
Feb 28 Javascript
JavaScript中的方法重载实例
Mar 16 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
Dec 26 Javascript
快速掌握Node.js事件驱动模型
Mar 21 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
Sep 04 Javascript
前端框架Vue.js构建大型应用浅析
Sep 12 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
Nov 04 Javascript
vue-router 学习快速入门
Mar 01 Javascript
写gulp遇到的ES6问题详解
Dec 03 Javascript
vue+element UI实现树形表格
Dec 29 Vue.js
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初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
php笔记之:文章中图片处理的使用
2013/04/26 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
php微信公众平台开发之获取用户基本信息
2015/08/17 PHP
JavaScript 动态添加表格行 使用模板、标记
2009/10/24 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
Python中处理时间的几种方法小结
2015/04/09 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
深入理解Django-Signals信号量
2019/02/19 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
Python 实现加密过的PDF文件转WORD格式
2020/02/04 Python
基于python 凸包问题的解决
2020/04/16 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
Python常用外部指令执行代码实例
2020/11/05 Python
python如何构建mock接口服务
2021/01/28 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
爱与责任演讲稿
2014/05/20 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
民间借贷被告代理词
2015/05/23 职场文书
银行工作心得体会范文
2016/01/23 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript
详解MySQL的内连接和外连接
2023/05/08 MySQL