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. 成长之路--Docker入门

    简介 Docker是一种新兴的虚拟化技术,能够一定程度上的代替传统虚拟机. Docker版本 Docker 划分为CE 和EE.CE 即社区版(免费,支持周期三个月),EE 即企业版,强调安全,付费使 ...

  2. css 小常识

    一.vertical-align可以采用负值(正/负值根据基线上下移动),也可以采用百分比值,而这个百分比值不是相对于字体大小或者其他什么属性计算的,而是相对于line-height计算的. 此外,w ...

  3. 在windows环境下运行compass文件出现的错误提示解决方案

    在windows环境下运行compass文件出现的错误提示解决方案 例如:经常在项目中运行grunt命令编译scss文件的时候,会出现下面的错误提示 (Encoding::CompatibilityE ...

  4. VS如何自动创建函数头 函数说明

    这样创建,这种方法在VS2008和VS2013下都可以. 这是效果 如何自定义格式呢? 第一步点击这个按钮 这个工具条需要安装VAssistX,如何安装这里不细说了. 第二步,点击这个按钮 第三步 点 ...

  5. arcgis 10.2 安装教程(含下载地址)

    http://jingyan.baidu.com/article/fc07f98911b66912ffe5199b.html 2013年7月,Esri即将推出全新的版本——ArcGIS 10.2,那些 ...

  6. jquery控制滚动条

    $(function () { $("table tr td a").css('white-space', 'nowrap'); $("div[id$=ctlScroll ...

  7. 【Linux】Vmware&Linux 网络配置

    Vmware 网络设置 Linux 网络设置 注:本实验使用Linux 版本为 RedHat 6.3 Vmware 网络设置 1.Vmware 网络工作模式 bridged(桥接模式) -- 网络能提 ...

  8. 仿照jQuery写一个关于选择器的框架(带了注释,请多多指教~)

    var select = (function () { //这是一个异常与捕获的代码,它表示的意思是:如果push方法出现了错误那么就需要重写push方法 try { //这边是自己模拟一个场景,来使 ...

  9. Android应用开发基础之五:网络编程(二)

    HttpClient 发送get请求 创建一个客户端对象 HttpClient client = new DefaultHttpClient(); 创建一个get请求对象 HttpGet hg = n ...

  10. 数据质量控制软件Q-CHECKER(转)

    随着企业信息化建设的不断深入进行,我们的企业将逐步地发展成为数字化企业.其中作为最基本构成的CATIA数模已经是产品开发制造的唯一依据,CATIA数模的质量就是加工的质量,就是制造的质量,就是生产出的 ...