39 lines
985 B
TypeScript
39 lines
985 B
TypeScript
|
import { Observable, Subject } from 'rxjs';
|
||
|
import { share } from 'rxjs/operators';
|
||
|
|
||
|
export class FileUploadItem {
|
||
|
file: File;
|
||
|
uploadTime: number;
|
||
|
uploadingProgress$: Observable<number>;
|
||
|
|
||
|
private uploadingProgress: Subject<number>;
|
||
|
private uploadStartTime: number;
|
||
|
|
||
|
private constructor(file: File) {
|
||
|
this.file = file;
|
||
|
}
|
||
|
|
||
|
static fromFiles(files: File[]): FileUploadItem[] {
|
||
|
const fileItems: FileUploadItem[] = [];
|
||
|
for (const file of files) {
|
||
|
fileItems.push(new FileUploadItem(file));
|
||
|
}
|
||
|
return fileItems;
|
||
|
}
|
||
|
|
||
|
uploadStart(): Subject<number> {
|
||
|
this.uploadStartTime = new Date().getTime();
|
||
|
this.uploadingProgress = new Subject<number>();
|
||
|
this.uploadingProgress$ = this.uploadingProgress
|
||
|
.asObservable()
|
||
|
.pipe(share());
|
||
|
return this.uploadingProgress;
|
||
|
}
|
||
|
|
||
|
uploadComplete() {
|
||
|
const endTime = new Date().getTime();
|
||
|
this.uploadTime = endTime - this.uploadStartTime;
|
||
|
this.uploadingProgress.complete();
|
||
|
}
|
||
|
}
|