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

子组件:

<template>
<div class="upload-area-div">
<Upload
:type="upType"
class="upload-area"
:show-upload-list="false"
:before-upload="beforeUpload"
:action="uploadUrl">
<slot></slot>
</Upload> <!-- 上传弹窗 -->
<Modal
title="上传"
class-name="flex-center-modal opera-modal not-footer"
v-model="uploadModal"
:mask-closable="false"
@on-cancel="closeUpModal">
<div class="upload-progress">
<p class="file-name">{{fileName}}</p>
<Progress class="modu-progress" :percent="filePercent" :stroke-width="3"></Progress>
<div class="progress-btn">
<Button type="ghost" size="large" class="modu-ghost-btn" v-show="filePercent !== 100" @click="closeUpModal">取消</Button>
<!-- <Button type="primary" size="large" class="modu-primary-btn" v-show="filePercent === 100" @click="onComplete">完成</Button> -->
</div>
</div>
</Modal> <!-- Loading提示 -->
<Spin size="large" fix v-if="loadFlag" class="modu-spin">
<Icon type="load-c" size=18 class="modu-spin-icon-load"></Icon>
<div class="modu-spin-text">Loading</div>
</Spin> </div>
</template>
<script type="text/ecmascript-6">
export default {
props: {
upType: { // 是否允许拖拽上传,select为点击上传
type: String,
default: "drag"
},
uploadUrl: { // 上传文件接口
type: String,
default: "/example/api/file"
},
fileformat: { // 允许上传的文件类型后缀
type: Array,
default: function() {
return ['zip']
}
}
},
data(){
return {
fileName: null, // 文件名字
filePercent: 0, // 上传进度
uploadModal: false, // 上传弹窗
fileUrl:'',
loadFlag: false,
previousRequest: null
}
},
mounted(){ },
methods:{
// 上传之前
beforeUpload(file) {
// console.log("上传之前")
this.loadFlag = true;
this.fileAjaxUpload(file);
return false;
},
// 关闭上传弹窗/取消上传
closeUpModal() {
this.$Message.info('取消上传');
if (this.previousRequest) {
this.previousRequest.abort();
}
this.uploadModal = 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.loadFlag = false;
this.$Message.error("文件格式不正确,请上传zip格式文件");
return false;
}
let fd = new FormData(); // 声明formData()
fd.append('file', file);
this.$http({
url: self.uploadUrl,
method:'post',
body: fd,
before(request) {
self.previousRequest = request;
},
progress: function(progressEvent) { // 上传进度事件
self.loadFlag = false;
if(progressEvent.lengthComputable){
// 属性lengthComputable主要表明总共需要完成的工作量和已经完成的工作是否可以被测量
// 如果lengthComputable为false,就获取不到progressEvent.total和progressEvent.loaded
self.uploadModal = true;
let _percent = Number((progressEvent.loaded / progressEvent.total * 100).toFixed(2));
self.filePercent = _percent < 100 ? _percent : 99;
}
}
}).then((response) =>{
// 上传成功
let resp = response.data;
if (resp.status === 200) {
self.filePercent = 100;
self.fileUrl = resp.data;
self.$emit('onComplete', resp.data);
self.$Message.success('上传成功');
} else {
if (resp.status !== 401) {
self.$Message.error(resp.desc);
}
}
this.uploadModal = false;
}).catch(error =>{
self.loadFlag = false;
self.uploadModal = false;
if (self.previousRequest) {
self.previousRequest.abort();
}
})
}
}
}
</script>

父组件调用:

<m-upload @onComplete="onComplete">
<div class="offLine-war">
<div class="offLine-war-title">{{ fileUrl ? '重新上传' : '上传压缩包' }}</div>
</div>
</m-upload> <script>
import mUpload from '@/components/mUpload/mUpload.vue';
export default {
data() {
return {
fileUrl: ''
}
},
components: {
mUpload: mUpload
},
methods: {
onComplete(fileUrl) {
this.fileUrl = fileUrl;
}
}
}
</script>

vue-resource+iview上传文件取消上传的更多相关文章

  1. iview+axios实现文件取消上传

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

  2. go 发送post请求(键值对、上传文件、上传zip)

    一.post请求的Content-Type为键值对 1.PostForm方式 package main import ( "net/http" "net/url" ...

  3. php 上传文件实例 上传并下载word文件

    上传界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  4. 异步上传文件,ajax上传文件,jQuery插件之ajaxFileUpload

    http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html 一.ajaxFileUpload是一个异步上传文件的jQuery插件. ...

  5. ajax:html5上传文件,上传之前可以实现本地预览

    本主题主要涉及两个新内容: 1.上传文件(主要使用了FormData) 2.本地预览(主要使用了FileReader) html5的FormData其实就是平时的Form表单,只是html5可以直接新 ...

  6. models渲染字典&form表单上传文件&ajax上传文件

    {# {% for u in teacher_d.keys %}#} {# {% for u in teacher_d.values %}#} {% for k,u in teacher_d.item ...

  7. ASP.NET上传文件,已经上传的大小保存在session中,在另一个页面中读取session的值不行

    想自己做个ASP.NET上传文件时显示进度条的, 按照自己的想法,其实也就是显示每次已经上传的字节,从网上找到一个方法是能够把文件变成流以后再慢慢写入的,我在那个循环写入的时候每循环一次都把已经上传的 ...

  8. Koa - 使用koa-multer上传文件(上传限制、错误处理)

    前言 上传文件在开发中是很常见的操作,今天我选择使用koa-multer中间件来实现这一功能,除了上传文件外,我还会对文件上传进行限制,以及发生上传错误时的处理. 由于原来的 koa-multer 已 ...

  9. ftp上传文件,上传的文件大小是0

    此问题是最近出现,代码和配置完全没改,试过所有的办法,两天了一直都解决不了,用完弃坑. 防火墙.被动模式主动模式,编码,服务端内存,日志,common-net.jar版本问题,服务端配置,nginx配 ...

随机推荐

  1. 深入理解JavaScript系列(28):设计模式之工厂模式

    介绍 与创建型模式类似,工厂模式创建对象(视为工厂里的产品)时无需指定创建对象的具体类. 工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类.该模式使一个类的实例化延迟到了子类.而子 ...

  2. 跨域策略文件crossdomain.xml文件

    使用crossdomain.xml让Flash可以跨域传输数据 一.crossdomain.xml文件的作用    跨域,顾名思义就是需要的资源不在自己的域服务器上,需要访问其他域服务器.跨域策略文件 ...

  3. 我们能用canvas做什么?

    什么是Canvas? Canvas元素是HTML5的一部分,允许脚本语言动态渲染位图像.Canvas由一个可绘制地区HTML代码中的属性定义决定高度和宽度.JavaScript代码可以访问该地区,通过 ...

  4. 一分钟学会Git操作流程

    今天整理下公司操作git 流程,尽量用最最简洁的方式整理出来,方便以后有新来的同事学习使用. 我整理的这个Git操作,基本上只需要一分钟,就可以轻松上手啦!!! 一. 拉取提交操作 1.拉取远程代码 ...

  5. 2017 年 9 月 27 日 js(文本框内容添加到select)

    写法 <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">   ...

  6. Csharp: Detect Mobile Browsers

    /// <summary> /// 檢測手機客戶端 HttpCapabilitiesBase.IsMobileDevice /// .NET 4.5 /// 塗聚文注 /// </s ...

  7. mui 的注意事项点

    1.mui的subpage在微信浏览器中不能正常工作. 2.MUI支持json格式解析: 调用JSON.parse(data)或者JSON.stringify(data); 3.

  8. 18_Condition条件

    [简述] wait()和notify()方法是和synchronized关键字合作使用的. Condition是和重入锁相关联的,通过ReentrantLock.newCondition()生成一个与 ...

  9. Android中的Service与进程间通信(IPC)详解

    Service 什么是Service 在后台长期运行的没有界面的组件.其他组件可以启动Service让他在后台运行,或者绑定Service与它进行交互,甚至实现进程间通信(IPC).例如,可以让服务在 ...

  10. matlab练习程序(全景图到穹顶图)

    这个程序我最初是用FreeImage写的,这两天改成了matlab,再不贴上来,我就要忘了. 看到一篇文章有这样的变换,挺有意思的,就拿来试了一下,文章点此. 全景图到穹顶图变换,通俗的说就是将全景图 ...