iview+axios实现文件取消上传

iview框架的上传文件目前不支持在上传文件的过程中取消上传,结合axios请求可以实现:使用iview的上传和拖拽功能,却使用axios的上传文件功能来实现取消上传。

html

<Upload
type="drag"
class="upload-small-area"
:show-upload-list="false"
:before-upload="beforeUpload"
action="/example/api/file">
<div class="upload-small-cont">
<p class="upload-small-tip">点击/拖拽上传文件</p>
<p class="upload-small-tip">请上传apk/ipa格式文件</p>
</div>
</Upload> <!-- 上传弹窗 -->
<Modal
title="Title"
v-model="uploadModal"
:mask-closable="false"
@on-cancel="closeUpModal"
class-name="opera-modal">
<div class="upload-progress">
<p class="file-name">{{fileName}}</p>
<Progress :percent="filePercent" :stroke-width="3"></Progress> <!-- 进度条 -->
<div class="progress-btn" v-show="filePercent !== 100">
<Button type="ghost" class="modu-ghost-btn" @click="closeUpModal">取消</Button>
</div>
<div class="progress-success-btn" v-show="filePercent === 100">
<Button type="ghost" class="modu-ghost-btn">下一步</Button>
<Button type="primary" class="modu-primary-btn">直接发布</Button>
</div>
</div>
</Modal> <!-- 失败弹窗 -->
<Modal
title="上传"
v-model="errorModal"
@on-cancel="closeErrModal"
:mask-closable="false"
class-name="opera-modal">
<div class="upload-error">
<div class="upload-error-status">
<p class="upload-error-tip">不支持的上传,请上传apk或ipa文件</p>
</div>
<div class="upload-error-btn">
<Button type="ghost" class="modu-ghost-btn" @click="closeErrModal">取消</Button>
<Upload
class="reUpload-btn"
:show-upload-list="false"
:before-upload="beforeUpload"
action="/example/api/file">
<Button type="primary" class="modu-primary-btn">重新上传</Button>
</Upload>
</div>
</div>
</Modal>

js

export default {
data(){
return {
fileformat: ['apk', 'ipa'], // 允许上传的文件类型
fileName: null, // 文件名字
filePercent: 0, // 上传进度
uploadModal: false, // 上传弹窗
errorModal: false, // 上传失败弹窗
cancelUpload: null // 取消上传
}
},
methods:{
// 上传之前
beforeUpload(file) {
console.log("上传之前")
console.log(file)
this.fileAjaxUpload(file);
return false; // 阻止使用iview的上传功能
},
// 关闭上传弹窗/取消上传
closeUpModal() {
console.log("取消上传");
if(this.cancelUpload){ // 判断cancelUpload是否存在
this.cancelUpload.cancel('取消上传'); //在请求catch()的error中输出'取消上传'
}
},
// 关闭上传失败弹窗
closeErrModal() {
this.errorModal = false;
},
// 上传文件请求
fileAjaxUpload(file) {
let self = this;
this.fileName = file.name;
// 验证上传的文件类型
let index1 = file.name.lastIndexOf(".");
let index2 = file.name.length;
let fileSuffix = file.name.substring(index1+1, index2).toLowerCase();
if (this.fileformat.indexOf(fileSuffix) == -1) { // 类型不符合
this.$Message.error("文件格式不正确,请上传apk/ipa格式文件");
return false;
}
// 上传文件
let fd = new FormData(); // 声明formData()
fd.append('file', file);
let CancelToken = this.$http.CancelToken;
this.cancelUpload = CancelToken.source();
this.$http({
url:'/example/api/file',
method:'post',
data: fd,
transformRequest: [function(data){
return data;
}],
cancelToken: self.cancelUpload.token, // 取消事件
onUploadProgress: function(progressEvent) { // 上传进度事件
if(progressEvent.lengthComputable){
// 属性lengthComputable主要表明总共需要完成的工作量和已经完成的工作是否可以被测量
// 如果lengthComputable为false,就获取不到progressEvent.total和progressEvent.loaded
console.log(progressEvent)
self.uploadModal = true;
self.errorModal = false;
self.filePercent = Number((progressEvent.loaded / progressEvent.total * 100).toFixed(2));
}
}
}).then(res =>{
// 上传成功
console.log(res)
}).catch(error =>{
console.log(error)
if (self.$http.isCancel(error)) { // 取消上传
self.uploadModal = false;
self.$Message.info(error.message);
} else {
self.uploadModal = false;
self.errorModal = true;
}
})
}
}
}

iview+axios实现文件取消上传的更多相关文章

  1. vue-resource+iview上传文件取消上传

    vue-resource+iview上传文件取消上传 子组件: <template> <div class="upload-area-div"> <U ...

  2. jQuery Ajax方式上传文件实现暂停或取消上传

    未上传时要实现取消,很简单... 但如果用户点击了上传,并加载了进度信息... 2017-05-04再次改进.在上传过程中用户可以按 Esc 来取消上传(取消当前上传,或者是全部上传)... 也可以在 ...

  3. vue大文件分片上传插件

    最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

  4. php选择文件夹上传

    最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

  5. 聚是一团火散作满天星,前端Vue.js+elementUI结合后端FastAPI实现大文件分片上传

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_175 分片上传并不是什么新概念,尤其是大文件传输的处理中经常会被使用,在之前的一篇文章里:python花式读取大文件(10g/50 ...

  6. 带进度条的文件批量上传插件uploadify

    有时项目中需要一个文件批量上传功能时,个人认为uploadify是快速简便的解决方案. 先上效果图: 一. 下载uploadify 从官网下载uploadify的Flash版本(Flash版本免费,另 ...

  7. .Net多文件同时上传(Jquery Uploadify)

    前提:领导给了我一个文件夹,里面有4000千多张产品图片,每张图片已产品编号+产品名称命名,要求是让我把4000多张产品图片上传到服务器端,而且要以产品编码创建n个文件夹,每张图片放到对应的文件夹下. ...

  8. 利用uploadify+asp.net 实现大文件批量上传。

    前言 现在网上文件上传组件随便一搜都是一大堆,不过看大家一般都在用uploadify这个来上传文件.由于项目需要,我在来试了一下.因为第一次使用,也遇到了很多问题,特此记录! ------------ ...

  9. 利用Jquery使用HTML5的FormData属性实现对文件的上传

    1.利用Jquery使用HTML5的FormData属性实现对文件的上传 在HTML5以前我们如果需要实现文件上传服务器等功能的时候,有时候我们不得不依赖于FLASH去实现,而在HTML5到来之后,我 ...

随机推荐

  1. 两个三汇API使用的坑

    最近呼叫中心走火入魔了,我的<一步一步开发呼叫中心>系列编写过程中,遇到各种的问题,今天晚上,来记录一下纠结了我N久的一个问题: 内线通过板卡外呼时,如果对方的呼叫中心需要发送按键响应(如 ...

  2. C#字符串替换_无视大小写

    C#里的string.Replace是不能无视大小写的. 首先想到的是正则表达式,在网上查了下,果然有用正则表达式配合一些逻辑运算,实现无视大小写的字符串替换方法.但是正则表达式的方法用起来很麻烦,实 ...

  3. flutter Failed to setup Skia Gr context导致白屏

    添加 --enable-software-rendering参数运行 G:\soft\flutter\project\hello_world> flutter run --enable-soft ...

  4. SQL 表定时同步

    1.创建存储过程 create proc [dbo].[sync_calendar] as truncate table dbo.CalendarEvents insert into Calendar ...

  5. 了解WaitForSingleObject中WAIT_ABANDONED 返回值

    1.互斥量内核对象 互斥量内核对象用来确保一个线程独占对一个资源的访问.互斥量对象包含一个使用计数.线程ID以及递归计数.互斥量与关键段的行为完全相同.但是互斥量是内核对象,而关键段是用户模式下的同步 ...

  6. 微服务学习笔记一:Spring Cloud简介

    1.Spring Cloud是一个工具集:Spring   Cloud是在Spring    Boot的基础上构建的,用于简化分布式系统构建的工具集:使架构师在创建和发布微服务时极为便捷和有效. Sp ...

  7. css display:table圣杯布局

    圣杯布局指的是一个网页由页眉,3等高列(2个固定侧栏和中心内容主体)和贴在页面底部的页脚组成. 主要思路是对整个容器使用地上diaplay:table 的css规则,然后分别对页眉页脚使用displa ...

  8. haproxy/nginx+keepalived负载均衡 双机热备 邮件报警 实战及常见问题

    Haproxy 做http和tcp反向代理和负载均衡keepalived 为两台 Haproxy 服务器做高可用/主备切换.nginx   为内网服务器做正向代理,如果业务需求有变化,也可以部分替代 ...

  9. 使用版本 1.0.0 的 Azure ARM SDK for Java 创建虚拟机时报错

    问题描述 我们可以通过使用 Azure ARM SDK 来管理 Azure 上的资源,因此我们也可以通过 SDK 来创建 ARM 类型的虚拟机,当我们使用 1.0.0 版本的 Azure SDK fo ...

  10. monkeyrunner多点触摸

    思路是:在屏幕上某个位置按着不放:device.touch(x,y,md.DOWN) 然后再做一个滑动的操作:device.drap((x1,y1),(x2,y2),0.2,10) 然后再松开按键:d ...