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. mysql根据某个字段分组根据更新时间获取最新的记录

    我现在有一种统计表,要根据一个字段分组然后根据更新时间,每个分组获取最新的一条记录.命名感觉挺简单的一个需求,然而没什么思路,当然是问度娘了. 度娘的答案很统一,然而都不管用,都是报错的,不知道是不是 ...

  2. ionic2 目录

    首先 ionic2 暂时找不到中文文档.本人英语又很渣.无奈之下只能依赖于百度翻译.完全是已自己理解的方式运作 ,可能里面会有一些偏差之类的 不过我都测试过代码是可以跑通的 只不过讲解的部分可能... ...

  3. PAT 1051 Pop Sequence

    #include <cstdio> #include <cstdlib> #include <vector> using namespace std; bool p ...

  4. 在asp.net中如何使用Session

    2.那么在asp.net中到底该怎么使用Session呢? Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换 ...

  5. Eclipse SWT

    Reference: http://www.eclipse.org/swt/ http://www.functionx.com/win32/Lesson01.htm http://www.win32d ...

  6. MD5简单实例

    如图当点击按钮时,会先判断是否第一次登陆,如果是第一次登陆登陆则会弹出设置密码的弹窗,若果登陆过则弹出登陆弹窗 其中输入的密码会用MD5加密下 package com.org.demo.wangfen ...

  7. 彻底解决INSTALL_FAILED_UPDATE_INCOMPATIBLE的安装错误

    利用adb shell进入系统,进入/data/app或者/data/data,删除跟你安装的apk同样的包名: 按Ctrl+C退出系统,利用adb pull /data/system/package ...

  8. webstorm 2017.1 破译

    安装完webstorm后, 在弹出的注册窗口选择 activate > license server > 在 License server address 里输入 "http:/ ...

  9. ExecutorService的invokeAny方法

    一.此方法获得最先完成任务的结果,即Callable<T>接口中的call的返回值,在获得结果时,会中断其他正在执行的任务 示例代码: import java.util.ArrayList ...

  10. Ruby在Windows上安装

    Ruby在Windows下安装windows下的rails2.02环境搭建 ROR本地安装的技术含量比较高的 一.安装Ruby1.下载Ruby()安装包双击安装,安装过程中注意选中"Enab ...