Les serveurs sgcWebSockets permettent d'envoyer des fichiers volumineux en POST sans affecter la mémoire du serveur.
Lorsqu'un client HTTP envoie un flux multipart/form-data, ce flux est sauvegardé en mémoire par le serveur. Quand les fichiers sont volumineux, le serveur peut lever une exception out of memory. Pour éviter ces exceptions, le serveur dispose d'une propriété appelée HTTPUploadFiles qui permet de configurer la façon dont les flux POST sont gérés : en mémoire ou en flux fichier. Si les flux sont gérés en flux fichier, ils sont stockés directement sur le disque dur et les problèmes de mémoire sont évités.
Configuration du serveur
Pour configurer ton serveur afin de sauvegarder les flux multipart/form-data en tant que flux fichier, suis les étapes suivantes :
1. Définis la propriété HTTPUploadFiles.StreamType = pstFileStream. Avec cette configuration, le serveur stockera ces flux sur le disque dur.
2. Tu peux configurer la taille minimale en octets à partir de laquelle les fichiers seront stockés en flux fichier. Par défaut, la valeur est zéro, ce qui signifie que tous les flux seront stockés en flux fichier.
3. Le dossier où les flux sont stockés se définit avec SaveDirectory : s'il n'est pas défini, ils seront stockés dans le même dossier que l'application.
4. Lorsqu'un client envoie un multipart/form-data, le contenu est encodé entre des boundaries. Si la propriété RemoveBoundaries est activée, le contenu des boundaries sera extrait automatiquement une fois le flux complètement reçu.
Exemple de code
// D'abord, crée une nouvelle instance de serveur et définis le stockage des flux en flux fichier.
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.Port := 5555;
oServer.HTTPUploadFiles.StreamType := pstFileStream;
oServer.Active := True;
// Crée ensuite un nouveau fichier html avec la configuration suivante
<html>
<head><title>sgcWebSockets - Upload Big File</title></head>
<body>
<form action="http://127.0.0.1:5555/file" method="post" enctype="multipart/form-data">
<input type="file" name="file_1" />
<input type="submit" />
</form>
</body>
</html>
// Enfin, ouvre le fichier html avec un navigateur et envoie un fichier au serveur.
// Le serveur créera un nouveau flux fichier avec l'extension ".sgc_ps" et, une fois le flux entièrement reçu,
// il extraira le fichier des boundaries.
