NG-ZORRO 使用相关

Upload上传

import { Component, Input, Output, EventEmitter, Inject } from '@angular/core';
import { NzMessageService, UploadFile, UploadFilter, UploadXHRArgs } from 'ng-zorro-antd';
import {
    HttpRequest,
    HttpClient,
    HttpEventType,
    HttpEvent,
    HttpResponse
} from '@angular/common/http';
import { forkJoin } from 'rxjs';
import { HttpService } from './httpService';
export class File {
    uid: '';
    name: '';
    status: 'done';
    url: '';
}
export class UploadFileType {
    'fileId': '';
    'fileName': '';
    'fileSize': '';
    'fileUrl': '';
    'sequence': '0';
}

@Component({
    selector: 'UploadPictureCardComponent',
    template: `
    <nz-upload
      [nzAction]='urlConfig.url+"文件上传地址后缀"'
      (nzChange)="handleChange($event)"
      nzListType="picture-card"
      [nzBeforeUpload]="beforeUpload"
      [nzFilter]="filters"
      [nzShowUploadList]="false"
      [(nzFileList)]="fileList">
        <i class="anticon anticon-plus"></i>
        <div *ngIf='!childIsLoad' class="ant-upload-text">Upload</div>
        <div *ngIf='childIsLoad' class="ant-upload-text">文件上传中{{progress}}...</div>
    </nz-upload>
  `
})
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(); //告诉父组件是否上传中

    constructor(
        private msg: NzMessageService,
        private httpService: HttpService,
        @Inject('urlConfig') public urlConfig
    ) {}
    ngOnInit() {
        //初始化文件
    }

    //上传限制
    filters: UploadFilter[] = [
        {
            name: 'type',
            fn: (fileList: UploadFile[]) => {
                const filterFiles = fileList.filter(
                    w =>
                        ~['image/png', 'image/jpg', 'image/gif', 'image/bmp', 'image/jpeg'].indexOf(
                            w.type
                        )
                );
                if (filterFiles.length !== fileList.length) {
                    this.msg.create('error', '请上传png、jpg、gif、bmp、jpeg格式的图片!');
                    return filterFiles;
                }
                return fileList;
            }
        }
    ];
    //上传之前的操作
    beforeUpload = (file: File) => {
        let ispass = true; //是否继续往下执行
        console.log('上传之前的操作');
        //以下操作在
        if (window.sessionStorage.getItem(this.flieSessionStoragesName)) {
            let list_ = JSON.parse(window.sessionStorage.getItem(this.flieSessionStoragesName));
            for (let i in list_) {
                if (file.name == list_[i].fileName) {
                    ispass = false;
                    this.msg.create('warning', '请勿上传同名文件!');
                    break;
                }
            }
        }
        return ispass; //返回true继续执行,false直接停止
    };

    //开始、上传进度、完成、失败都会调用这个函数
    handleChange(info: any): void {
        console.log(info);
        if (info.type == 'start') {
            this.childIsLoadOuter.emit(true); //告诉父组件上传中
            this.progress = '0%';
        }
        if (info.type == 'progress') {
            this.progress = info.event.percent.toFixed(2) + '%';
        }
        if (info.type === 'success') {
            this.progress = '';
            console.log(info);
            let file = new UploadFileType();
            file.fileId = info.file.response['data'].id;
            file.fileName = info.file.response['data'].name;
            file.fileSize = info.file.response['data'].size;
            file.fileUrl = info.file.response['data'].downloadUrl;
            file.sequence = '0';
            this.childOuter.emit(file); //向父组件传值
            this.childIsLoadOuter.emit(false); //告诉父组件上传完成
            this.msg.create('success', '上传成功!');
        }
        if (info.type === 'error') {
            this.childIsLoadOuter.emit(false); //告诉父组件上传完成
        }
    }
}

 

posted @ 2018-12-03 11:09  一城柳絮吹成雪  阅读(1899)  评论(0编辑  收藏  举报