【发布时间】:2019-03-22 12:30:22
【问题描述】:
我正在使用 Azure Blob 存储 执行file upload 操作,现在我可以将文件上传到 Azure Blob,但是在上传文件时我想显示 mat-spinner 给用户,因为上传需要几秒钟。
以下是组件代码:
HTML
<img src="{{Url+storageToken}}" height="100px" width="100px">
<input type="file" (change)="onFileChange($event)" >
<mat-spinner></mat-spinner>
<div *ngIf="filesSelected">
<pre>{{uploadProgress$ | async | json}}</pre>
</div>
TS
import { Component } from '@angular/core';
import { from, Observable } from 'rxjs';
import { combineAll, map } from 'rxjs/operators';
import { BlobService } from './az-storage/blob.service';
import { ISasToken } from './az-storage/azure.storage';
interface IUploadProgress {
filename: string;
progress: number;
}
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
uploadProgress$: Observable<IUploadProgress[]>;
filesSelected = false;
Url: string;
fileName: string;
storageToken: string = '......storageAccessToken................';
constructor(private blobStorage: BlobService) {}
onFileChange(event: any): void {
this.filesSelected = true;
this.uploadProgress$ = from(event.target.files as FileList).pipe(
map(file => this.uploadFile(file)),
combineAll()
);
console.log(File);
}
uploadFile(file: File): Observable<IUploadProgress> {
const accessToken: ISasToken = {
container: 'upload-demo',
filename: 'users/' + file.name,
storageAccessToken:
'......storageAccessToken................',
storageUri: 'https://file-upload.blob.core.windows.net/'
};
this.fileName = file.name;
this.Url = `https://file-upload.blob.core.windows.net/upload-demo/users/${this.fileName}`;
return this.blobStorage
.uploadToBlobStorage(accessToken, file)
.pipe(map(progress => this.mapProgress(file, progress)));
}
private mapProgress(file: File, progress: number): IUploadProgress {
return {
filename: file.name,
progress: progress <================ When it becomes 100%
};
}
}
现在我在模板中显示 文件名 和 uploading % 这个:
预期结果:
在模板中调用onFileChange 事件时,我想启用spinner,而当upload % is 100%(即进度为100% 时)我想关闭spinner
【问题讨论】:
标签: angular azure angular-material angular6 azure-blob-storage