import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators';
@Component({
selector: 'example',
template: `
<div *ngFor="let dataElement of data$ | async">
{{ dataElement.name }}
</div>
`,
})
export class ExampleComponent implements OnInit {
public data$;
constructor(private http: HttpClient) {
}
ngOnInit(): void {
this.data$ = this.http.get('http://url.com').pipe(
map(response => response.data)
);
}
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next
.handle(req)
.pipe(
map((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
return event.clone({
body: event.body.data
});
}
return event;
}
),
catchError((error: HttpEvent<any>) => {
if (error instanceof HttpErrorResponse) {
return throwError(error.clone({
error: error.error.data,
url: error.url || ''
}));
}
return throwError(error);
})
);
}
require: '^window'
.// page.component.ts
private appData = new BehaviourSubject<any[]>([]);
constructor() {
this.appData.subscribe((data) => {
console.log('New data', data);
});
}
public addSomethingToAppData(something) {
this.appData.next([...this.appData.getValue(), something]);
}
1. Не сохранять данные о загруженном файле в БД. Это пустая трата времени и энергии. Вам потом прийдётся писать отдельный скрипт чтоб избавляться от временных файлов, которые пользователи передумали загружать
2. Файлы грузятся во временную директорию, которая чистится автоматически
3. Временная директория не видна наружу ни в коем случае. Потому что в противном случае это будет нереальная дыра в безопасности
4. Любые данные о файле вы можете получить джаваскриптом до загрузки. Не нужно утомлять сервер последующими обращениями к временному файлу
5. Никаких uuid. Если пользуетесь пхп, то php.net/manual/en/function.tempnam.php . Для других языков/фреймворков ищите по запросу "generate unique file name"