HTTP Post Big Files

· Funktionen

sgcWebSockets-Server erlauben das Posten großer Dateien, ohne den Server-Speicher zu belasten. 

Sendet ein HTTP-Client einen multipart/form-data-Stream, wird dieser vom Server zunächst im Speicher gehalten. Bei großen Dateien kann der Server eine Out-of-Memory-Ausnahme bekommen. Um das zu vermeiden, hat der Server eine Eigenschaft namens HTTPUploadFiles, mit der du festlegen kannst, wie POST-Streams behandelt werden: im Speicher oder als Dateistreams. Werden die Streams als Dateistreams behandelt, werden die empfangenen Streams direkt auf die Festplatte gespeichert, sodass Speicherprobleme vermieden werden.

Server-Konfiguration 

So konfigurierst du deinen Server, multipart/form-data-Streams als Dateistreams zu speichern:

1. Setze die Eigenschaft HTTPUploadFiles.StreamType = pstFileStream. Mit dieser Einstellung speichert der Server die Streams auf der Festplatte.

2. Du kannst die Mindestgröße in Bytes festlegen, ab der Dateien als Dateistream gespeichert werden. Standardwert ist null, das heißt alle Streams werden als Dateistream gespeichert.

3. Den Ordner, in dem die Streams abgelegt werden, legst du mit SaveDirectory fest. Ohne Angabe werden sie im selben Ordner wie die Anwendung gespeichert.

4. Wenn ein Client multipart/form-data sendet, ist der Inhalt in Boundaries eingebettet. Ist die Eigenschaft RemoveBoundaries aktiviert, wird der Inhalt der Boundaries automatisch extrahiert, sobald der gesamte Stream empfangen wurde. 

Beispielcode

// First create a new server instance and set the Streams are saved as File Streams.
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.Port := 5555;
oServer.HTTPUploadFiles.StreamType := pstFileStream;
oServer.Active := True;
// Then create a new html file with the following configuration
<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>
// Finally open the html file with a web browser and send a file to the server. 
// The server will create a new file stream with the extension ".sgc_ps" and when the stream is fully received, 
// it will extract the file from the boundaries.