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 hashtable 修正版 下载
Dec 30 Javascript
a标签的href和onclick 的事件的区别介绍
Jul 26 Javascript
jquery ready函数、css函数及text()使用示例
Sep 27 Javascript
随鼠标上下滚动的jquery代码
Dec 05 Javascript
javascript常用的方法整理
Aug 20 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
Mar 21 Javascript
jquery判断对象是否为空并遍历对象的简单实例
Jul 26 Javascript
微信小程序之购物车功能
Sep 23 Javascript
easyUI下拉列表点击事件使用方法
May 18 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
May 26 Javascript
详解VueRouter进阶之导航钩子和路由元信息
Sep 13 Javascript
原生js调用json方法总结
Feb 22 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 中文乱码解决办法总结分析
2009/07/30 PHP
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
php 学习资料零碎东西
2010/12/04 PHP
php下连接mssql2005的代码
2011/01/17 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
python实现文本文件合并
2015/12/29 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
英国奢侈皮具品牌:Aspinal of London
2018/09/02 全球购物
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
党员创先争优承诺书
2014/03/26 职场文书
战友聚会主持词
2014/04/02 职场文书
九华山导游词
2015/02/03 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
话题作文之学会尊重
2019/12/16 职场文书
导游词之安徽巢湖
2019/12/26 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS