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); //告诉父组件上传完成 } } }

浙公网安备 33010602011771号