Upload上传

  1. import { Component, Input, Output, EventEmitter, Inject } from '@angular/core';
  2. import { NzMessageService, UploadFile, UploadFilter, UploadXHRArgs } from 'ng-zorro-antd';
  3. import {
  4. HttpRequest,
  5. HttpClient,
  6. HttpEventType,
  7. HttpEvent,
  8. HttpResponse
  9. } from '@angular/common/http';
  10. import { forkJoin } from 'rxjs';
  11. import { HttpService } from './httpService';
  12. export class File {
  13. uid: '';
  14. name: '';
  15. status: 'done';
  16. url: '';
  17. }
  18. export class UploadFileType {
  19. 'fileId': '';
  20. 'fileName': '';
  21. 'fileSize': '';
  22. 'fileUrl': '';
  23. 'sequence': '0';
  24. }
  25.  
  26. @Component({
  27. selector: 'UploadPictureCardComponent',
  28. template: `
  29. <nz-upload
  30. [nzAction]='urlConfig.url+"文件上传地址后缀"'
  31. (nzChange)="handleChange($event)"
  32. nzListType="picture-card"
  33. [nzBeforeUpload]="beforeUpload"
  34. [nzFilter]="filters"
  35. [nzShowUploadList]="false"
  36. [(nzFileList)]="fileList">
  37. <i class="anticon anticon-plus"></i>
  38. <div *ngIf='!childIsLoad' class="ant-upload-text">Upload</div>
  39. <div *ngIf='childIsLoad' class="ant-upload-text">文件上传中{{progress}}...</div>
  40. </nz-upload>
  41. `
  42. })
  43. export class UploadPictureCardComponent {

fileList: File[] = [];
uploadFiles: UploadFileType[] = [];
previewImage = '';
previewVisible = false;
progress = ''; //上传进度
@Input() childIsLoad;
@Input() flieSessionStoragesName; //文件存在sessionStorage中的键值
@Output() private childOuter = new EventEmitter(); //子组件向父组件传值
@Output() private childIsLoadOuter = new EventEmitter(); //告诉父组件是否上传中

  1. constructor(
  2. private msg: NzMessageService,
  3. private httpService: HttpService,
  4. @Inject('urlConfig') public urlConfig
  5. ) {}
  6. ngOnInit() {
  7. //初始化文件
  8. }
  9.  
  10. //上传限制
  11. filters: UploadFilter[] = [
  12. {
  13. name: 'type',
  14. fn: (fileList: UploadFile[]) => {
  15. const filterFiles = fileList.filter(
  16. w =>
  17. ~['image/png', 'image/jpg', 'image/gif', 'image/bmp', 'image/jpeg'].indexOf(
  18. w.type
  19. )
  20. );
  21. if (filterFiles.length !== fileList.length) {
  22. this.msg.create('error', '请上传png、jpg、gif、bmp、jpeg格式的图片!');
  23. return filterFiles;
  24. }
  25. return fileList;
  26. }
  27. }
  28. ];
  29. //上传之前的操作
  30. beforeUpload = (file: File) => {
  31. let ispass = true; //是否继续往下执行
  32. console.log('上传之前的操作');
  33. //以下操作在
  34. if (window.sessionStorage.getItem(this.flieSessionStoragesName)) {
  35. let list_ = JSON.parse(window.sessionStorage.getItem(this.flieSessionStoragesName));
  36. for (let i in list_) {
  37. if (file.name == list_[i].fileName) {
  38. ispass = false;
  39. this.msg.create('warning', '请勿上传同名文件!');
  40. break;
  41. }
  42. }
  43. }
  44. return ispass; //返回true继续执行,false直接停止
  45. };
  46.  
  47. //开始、上传进度、完成、失败都会调用这个函数
  48. handleChange(info: any): void {
  49. console.log(info);
  50. if (info.type == 'start') {
  51. this.childIsLoadOuter.emit(true); //告诉父组件上传中
  52. this.progress = '0%';
  53. }
  54. if (info.type == 'progress') {
  55. this.progress = info.event.percent.toFixed(2) + '%';
  56. }
  57. if (info.type === 'success') {
  58. this.progress = '';
  59. console.log(info);
  60. let file = new UploadFileType();
  61. file.fileId = info.file.response['data'].id;
  62. file.fileName = info.file.response['data'].name;
  63. file.fileSize = info.file.response['data'].size;
  64. file.fileUrl = info.file.response['data'].downloadUrl;
  65. file.sequence = '0';
  66. this.childOuter.emit(file); //向父组件传值
  67. this.childIsLoadOuter.emit(false); //告诉父组件上传完成
  68. this.msg.create('success', '上传成功!');
  69. }
  70. if (info.type === 'error') {
  71. this.childIsLoadOuter.emit(false); //告诉父组件上传完成
  72. }
  73. }
  74. }

NG-ZORRO 使用相关的更多相关文章

  1. Angular: 执行ng lint后如何快速修改错误

    当我第一次被分配到“修正执行ng lint语句后的错误”这项任务前,我就被导师提前告知这是一个很无聊的任务,当我开始后,我发现其实有一些办法可以加快这个无聊单调的工作.接下来,我就分享一下我的经验. ...

  2. 记录项目版本升级angular4 ~ angular5

    前言: 在上一篇ng4文章<angular4--实际项目搭建总结>中说过,等到ng5正式发布,并且蚂蚁的NG ZORRO兼容ng5之后,我会对ng4项目进行升级.这篇文章就是大概说下升级的 ...

  3. 如何用ABP框架快速完成项目(6) - 用ABP一个人快速完成项目(2) - 使用多个成熟控件框架

    正如我在<office365的开发者训练营,免费,在微软广州举办>课程里面所讲的, 站在巨人的肩膀上的其中一项就是, 尽量使用别人成熟的框架. 其中也包括了控件框架   abp和52abp ...

  4. 52ABP模板 ASP.Net Core 与 Angular的开源实例项目

    阅读文本大概需要 5 分钟. 开始之前 自从上一篇文章".NET:持续进化的统一开发平台"发布后,已经有三个月的时间没有写过文章了. 这段时间,做了两场线下活动,一场在上海,一场在 ...

  5. Angular2常用命令

    一.常用命令 1.1 npm config list配置项目 可进行相关代理配置,通常可以配置在网络环境较差的情况下,配置相关代理.相关的设置命令如图: 1.2 ng 新建启动项目 ng new pr ...

  6. 2021 年最值得推荐的 7 个 Angular 前端组件库 - DevUI

    摘要:DevUI 是一款面向企业中后台产品的开源前端解决方案,它倡导沉浸.灵活.至简的设计价值观,提倡设计者为真实的需求服务,为多数人的设计,拒绝哗众取宠.取悦眼球的设计.如果你正在开发 ToB 的工 ...

  7. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

  8. Andrew Ng机器学习笔记+Weka相关算法实现(四)SVM和原始对偶问题

    这篇博客主要解说了Ng的课第六.七个视频,涉及到的内容包含,函数间隔和几何间隔.最优间隔分类器 ( Optimal Margin Classifier).原始/对偶问题 ( Primal/Dual P ...

  9. Andrew Ng机器学习笔记+Weka相关算法实现(五)SVM最优间隔和核方法

    这一章主要解说Ng的机器学习中SVM的兴许内容.主要包括最优间隔分类器求解.核方法. 最优间隔分类器的求解 利用以一篇讲过的的原始对偶问题求解的思路,我们能够将相似思路运用到SVM的求解上来. 详细的 ...

  10. 走进AngularJs(二) ng模板中常用指令的使用方式

    通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的.ng的模板真是让我爱不释手.学习ng道路还很漫长,从模板 ...

随机推荐

  1. html和css常见问题解答

    1. 详细描述层叠和继承的概念. 元素内嵌样式(用元素的全局属性style定义的样式) 文档内嵌样式(定义在style元素中的样式) 外部样式(用link元素导入的样式) 用户样式(用户定义的样式) ...

  2. [Pytorch Bug] "EOFError: Ran out of input" When using Dataloader with num_workers=x

    在Windows上使用Dataloader并设置num_workers为一个非零数字,enumerate取数据时会引发"EOFError: Ran out of input"的报错 ...

  3. PHP递归函数return返回null的问题

    前段时间在写递归函数的时候碰到个问题,返回值一直为null,这里记录一下. 写个小例子: /** * @param $i * @return mixed */ function recursion($ ...

  4. 从零开始的微信小程序入门教程(一)

    之前说要和同事一起开发个微信小程序项目,现在也在界面设计,功能定位等需求上开始实施了.所以在还未正式写项目前,打算在空闲时间学习下小程序.本意是在学习过程中结合实践整理出一个较为入门且不是很厚的教程, ...

  5. 融云技术分享:解密融云IM产品的聊天消息ID生成策略

    本文来自融云技术团队原创分享,原文发布于“融云全球互联网通信云”公众号,原题<如何实现分布式场景下唯一 ID 生成?>,即时通讯网收录时有部分改动. 1.引言 对于IM应用来说,消息ID( ...

  6. ES5提取公共变量

    在ES5中,请求地址前缀等需要作为公共变量提出. 则需在common.js写上 Object.defineProperty(window,'base',{ value:"http://xx. ...

  7. laravel项目本地数据库连接错乱原因和解决方法

    由于在本地建了两个laravel项目,test.me 和 api-test.me,当我在 test.me 中调用 curl 去请求 api-test.me 的方法,试图获取数据时, 接口一直返回没有找 ...

  8. centos7下mysql5.7的安装与配置

    centos7下MySQL5.7的安装与配置 下载 下载地址 根据系统和版本选择红框中的四个RPM包下载即可,然后放到centos7系统中的/opt目录下,等待稍后安装. 安装前的准备 1. 检查系统 ...

  9. 【LOJ#6682】梦中的数论(min_25筛)

    [LOJ#6682]梦中的数论(min_25筛) 题面 LOJ 题解 注意题意是\(j|i\)并且\((j+k)|i\), 不难发现\(j\)和\((j+k)\)可以任意取\(i\)的任意因数,且\( ...

  10. 简析 Golang IO 包

    简析 Golang IO 包 io 包提供了 I/O 原语(primitives)的基本接口.io 包中定义了四个最基本接口 Reader.Writer.Closer.Seeker 用于表示二进制流的 ...