项目中经常有上传文件的需求,有时候因为文件太大,用户没耐心继续等,或者发现上传错了,想取消上传的话,该怎么实现呢?

先看下上传文件的实现,原本的实现就是页面上一个选择文件的按钮,点击后选择文件,然后上传。选择文件的代码实现这里就不贴了,下面是上传文件的代码示例:

const uploadFile = () => {const file = selectFile();    // 自定义方法,得到上传的文件const fileType = getFileType(file); // 自定义方法,获取文件类型const uploadUrl = "https://www.example.com/uploadfile";    //文件上传的地址const response = await fetch(uploadUrl,{method: "PUT",body: file,headers: {"Content-Type" : fileType},}); if (response && response.status === 200) {console.log("upload file successfully");}}

这样的代码运行后,文件一旦开始上传就停不下来了。即使关掉页面,文件上传仍然在继续。

现在来加上取消上传的功能,我们用到的是AbortController来实现。下面代码里添加注释的部分就是新添加的取消上传及对成功取消后的处理相关代码:

const abortController = React.useRef<AbortController|null>(null);   //addconst uploadFile = () => {const file = selectFile();    const fileType = getFileType(file); const uploadUrl = "https://www.example.com/uploadfile";    abortController.current = new AbortController();    //addtry{    // handle cancel uploadconst response = await fetch(uploadUrl,{method: "PUT",body: file,headers: {"Content-Type" : fileType},signal: abortController?.current?.signal    //add}); if (response && response.status === 200) {console.log("upload file successfully");}} catch(err:any){if (err.name === 'AbortError') {console.log("upload is canceled"); } else {throw err;}}  }// add
const cancelUpload = () => {abortController?.current?.abort()
}

如果想取消上传的话,就在页面上添加一个取消按钮,点击事件就是上面的cancelUpload()方法。

点击取消后,abortController会发送一个abort信号,上传文件的请求收到这个信号就会中断,抛出一个AbortError异常,所以上面的代码也添加了try catch去处理这个异常。如果捕获到这个异常,说明上传文件的请求已经成功地取消了。

React实现文件上传过程中取消上传相关推荐

  1. 文件传输服务器异常,文件在上传过程中发生异常 文件在上传过程前,安全组...

    文件在上传过程前,安全组件计算散列值失败是什么意思 需要把文件上传页面的网址添加到可信站点,具体操作步骤如下: 天黑路会滑,社会太复杂,还有什么东西比人心更可怕, 首先打开系统的internet选项卡 ...

  2. tableView的plain样式的headerView的上拉过程中悬停解决方法

    tableView的plain样式的headerView的上拉过程中悬停解决方法 参考文章: (1)tableView的plain样式的headerView的上拉过程中悬停解决方法 (2)https: ...

  3. 文件在上传过程中发生异常服务器端,文件上传服务器端

    文件上传服务器端 内容精选 换一换 本节操作介绍本地Linux操作系统主机通过SCP向Linux云服务器传输文件的操作步骤.登录管理控制台,在ECS列表页面记录待上传文件的云服务器的弹性公网IP.上传 ...

  4. 网站搭建系列:云虚拟主机建站部署的过程中如何上传FTP?

    在用云虚拟主机搭建网站的过程中,最常见的,就是用FTP上传我们的建站程序(WordPress. 米拓.织梦.帝国等)或者是网站的源代码,对于前期刚接触建站的我来说,用虚拟主机上传建站程序搭建网站是一个 ...

  5. html中异步上传文件实现示例,HTML_html中异步上传文件实现示例,复制代码代码如下: form actio - phpStudy...

    html中异步上传文件实现示例 复制代码代码如下: 复制代码代码如下: 这是html中最常见最简单的表单提交方式,但是这种方式必须会切换页面,也许有些时候我们希望可以在同一个页面与服务器进行交互,并不 ...

  6. 解决百度网盘上传请求中或上传慢的方法

    百度网盘正常情况下是超快的,不应该是 "上传请求中" 或 几 k 的速度. 原因是因为 DNS 解释问题.尤其是海外用户.例如,使用 DNS 8.8.8.8 PS C:\WINDO ...

  7. 分析文件上传过程中的HTTP头部

    分析提交的HTTP请求的头部. POST /struts-upload/upload.do?queryParam=Successful HTTP/1.1 Accept: */* Referer: ht ...

  8. linux 环境下安装oracle11g方法及安装过程中遇上的问题解决方法

     Oralce安装教程 1.先安装需要的依赖包 找到哪个没有安装,直接yum install XX,直到所有的都安装完成.注意,可能一个包安装了,再次执行检查,还是提示没有安装,那么就不需要管他们了, ...

  9. 【计算机就业-校招高频面试题】面试过程中简历上的实习、项目、论文会问什么问题?

    前言 hello大家好,我本次分享的主题是计算机专业校招高频面试题,我一共总结了7个问题,从自我介绍到最后的反问问题,大部分都是和自己的简历上的项目,实习,论文等相关的,大家可以根据这些问题再稍微准备 ...

最新文章

  1. C++知识点57——类模板(2、类模板的局部特化与默认模板实参)
  2. 畅捷通t+标准版操作手册_外网IP访问畅捷通T+教程
  3. hdu 1540(线段树单点更新 区间合并)
  4. STM32L1X系列GPIO运用
  5. 扒网站:模板小偷 单页模板扒手
  6. CnBlogs自定义博客样式
  7. 迭代器修改元素_设计模式-迭代器模式
  8. Kudu:支持快速分析的新型Hadoop存储系统
  9. 中美线径对照表_导线截面与线径对照表
  10. cartographer原理简述
  11. pg数据库的基本操作
  12. 别做正常的傻瓜---奚恺元 随记2017-12-6周三
  13. 状告技术总监,索赔 90 万元,称其拖延研发进度、系统频繁崩溃出错、产品质量存在严重问题...
  14. Blender图解教程:用Krita为模型贴花
  15. Android之HorizontalScrollView(一)
  16. 互联网快讯:粉笔科技双核驱动实现突围;猿辅导以科技助力教育提质增效;抖音升级谣言专项治理
  17. 计算机基础及excel,S102-计算机基础(06)-EXCEL简介及基本操作
  18. 苹果AR/VR设备或定价2000美元 或命名Apple Vision
  19. Nexus 07 制品库制品晋级实践
  20. 经销商转型为什么要选择移动订货平台?

热门文章

  1. ABAP EWM模拟 /SCWM/ADGI过账更改HU数量
  2. BZOJ 1085 骑士精神
  3. Ubuntu 更换清华大学镜像源
  4. 第10章 Python第三方库概览
  5. 解决 这些文件可能对你的计算机有害问题
  6. Vue脚手架创建步骤
  7. win10怎么更改账户名称_如何更改电脑系统账户名称?让你的名称看起来高大上,快来学习吧...
  8. EOS合约账户名称及作用
  9. java装逼的话_程序员装逼指南(语言篇)
  10. mysql经常断电_MySQL突然断电异常解决