Met sgcWebSockets-servers kun je grote bestanden uploaden via HTTP POST zonder dat dit het servergeheugen belast.
Wanneer een HTTP-client een multipart/form-data-stream verzendt, slaat de server deze in het geheugen op. Bij grote bestanden kan dit een out-of-memory-uitzondering veroorzaken. Om dat te voorkomen heeft de server een property HTTPUploadFiles waarmee je instelt hoe POST-streams worden afgehandeld: in het geheugen of als bestandsstreams. Bij bestandsstreams worden de ontvangen streams direct op de harde schijf opgeslagen, zodat geheugenproblemen worden vermeden.
Serverconfiguratie
Om je server zo te configureren dat multipart/form-data-streams als bestandsstreams worden opgeslagen, volg je deze stappen:
1. Stel de property HTTPUploadFiles.StreamType = pstFileStream in. Hiermee slaat de server deze streams op op de harde schijf.
2. Je kunt instellen vanaf welke minimale grootte in bytes bestanden als bestandsstream worden opgeslagen. Standaard is de waarde nul, wat betekent dat alle streams als bestandsstream worden opgeslagen.
3. De map waarin de streams worden opgeslagen, geef je op met SaveDirectory; als deze niet is ingesteld, worden ze opgeslagen in dezelfde map als de applicatie.
4. Wanneer een client een multipart/form-data verstuurt, is de inhoud gecodeerd binnen boundaries. Als de property RemoveBoundaries is ingeschakeld, wordt de inhoud van de boundaries automatisch uit elkaar gehaald nadat de volledige stream is ontvangen.
Voorbeeldcode
// Maak eerst een nieuwe serverinstantie en stel in dat streams als bestandsstreams worden opgeslagen.
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.Port := 5555;
oServer.HTTPUploadFiles.StreamType := pstFileStream;
oServer.Active := True;
// Maak vervolgens een nieuw HTML-bestand met de volgende configuratie
<html>
<head><title>sgcWebSockets - Groot bestand uploaden</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>
// Open ten slotte het HTML-bestand in een webbrowser en stuur een bestand naar de server.
// De server maakt een nieuwe bestandsstream aan met de extensie ".sgc_ps" en zodra de stream volledig is ontvangen,
// haalt hij het bestand uit de boundaries.
