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 相关文章推荐
判断及设置浏览器全屏模式
Apr 20 Javascript
jquery实现公告翻滚效果
Feb 27 Javascript
JavaScript实现简单的二级导航菜单实例
Apr 15 Javascript
JavaScript操作class和style样式代码详解
Feb 13 Javascript
jquery 动态合并单元格的实现方法
Aug 26 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
Sep 01 Javascript
Angular.js去除页面中显示的空行方法示例
Mar 30 Javascript
微信小程序 侧滑删除(左滑删除)
May 23 Javascript
vue实现直播间点赞飘心效果的示例代码
Sep 20 Javascript
node+multer实现图片上传的示例代码
Feb 18 Javascript
简介JavaScript错误处理机制
Aug 04 Javascript
可拖拽组件slider.js使用方法详解
Dec 04 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服务器页面间跳转实现方法
2012/08/02 PHP
PHP curl 并发最佳实践代码分享
2012/09/05 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
php网站地图生成类示例
2014/01/13 PHP
PHP实现获取图片颜色值的方法
2014/07/11 PHP
phpfpm的作用和用法
2019/10/10 PHP
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
举例详解JavaScript中Promise的使用
2015/06/24 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
2016/12/16 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
从零学Python之入门(四)运算
2014/05/27 Python
python计算N天之后日期的方法
2015/03/31 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
python三大神器之fabric使用教程
2019/06/10 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
美国宠物商店:Wag.com
2016/10/25 全球购物
PHP如何自定义函数
2016/09/16 面试题
大学生优秀的自我评价分享
2013/10/22 职场文书
小加工厂管理制度
2014/01/21 职场文书
党员剖析材料范文
2014/09/30 职场文书
门卫岗位职责
2015/02/09 职场文书
详解如何使用Nginx解决跨域问题
2022/05/06 Servers