23-3 Service UploadService
Vous commencez à connaitre la chanson, pour l'envoi du fichier, on utilisera un service!
En effet, venons séparer la logique de composant de la logique d'envoi de fichiers. De plus, un service d'envoi de fichiers a beaucoup de sens dans le contexte puisqu'il pourra être réutilisé dans d'autres composantes.
Créer le service UploadService
- Créer le service via
Angular CLI
ng g service core/services/upload-service
- Créer une fonction
upload
acceptant un fichier en paramètre
export class UploadService {
constructor() { }
async upload(file: File) {
}
}
Préparer la requête
Pour préparer la requête, si on se souvient de ce qui a été fait en Postman, il s'agit de d'assigner les données via un objet FormData
et de faire une requête POST
pour envoyer les données.
- Créer un une instance de
FormData
et ajoutez le fichier à uploader aux données duFormData
via l'attributimage
attendu.
async upload(file: File) {
const formData = new FormData();
formData.append('image', file);
}
- Faire la requête
POST
avec comme body l'objetformData
async upload(file: File) {
const formData = new FormData();
formData.append('image', file);
const result = await stockageApi.post('', formData);
}
La requête est effectuée au chemin ''
, c'est-à-dire la racine de l'API défini par l'URL de base (https://fichiers.bentremblay.dev/images
).
Type de retour
Qu'allons-nous retourner comme type de retour? Une Promise
évidemment, mais de quel type?
Il sera nécessaire de créer un nouveau type de données représentant le retour, soit:
url: string;
size: number;
type: string;
filename: string;
Pour ce cas de figure, je vous invite à créer un modèle ReponseUpload
.
- Créer l'interface
ResponseUpload
sous le dossiermodels
ng g interface core/models/upload-reponse
- Définissez les différentes propriétés
src/app/core/models/upload-reponse.ts
export interface UploadReponse {
url: string;
size: number;
type: string;
filename: string;
} - Typez le retour de la requête
POST
pour retourner la réponse du service sous forme deReponseUpload
src/app/core/services/upload-service.tsasync upload(file: File): Promise<UploadReponse> {
const formData = new FormData();
formData.append('image', file);
const result = await stockageApi.post<UploadReponse>('', formData);
return result.data;
}