POST HTTP di file di grandi dimensioni

· Funzionalità

I server sgcWebSockets permettono di fare POST di file di grandi dimensioni senza influire sulla memoria del server. 

Quando un client HTTP invia uno stream multipart/form-data, lo stream viene salvato in memoria dal server. Quando i file sono grandi, il server può generare un'eccezione di out of memory; per evitare queste eccezioni, il server ha una proprietà chiamata HTTPUploadFiles in cui puoi configurare come vengono gestiti gli stream POST: in memoria o come file stream. Se gli stream vengono gestiti come file stream, gli stream ricevuti vengono salvati direttamente sul disco rigido evitando così i problemi di memoria.

Configurazione del server 

Per configurare il tuo server in modo da salvare gli stream multipart/form-data come file stream, segui i passi qui sotto:

1. Imposta la proprietà HTTPUploadFiles.StreamType = pstFileStream. Con questa configurazione, il server salverà questi stream sul disco rigido.

2. Puoi configurare la dimensione minima in byte oltre la quale i file verranno salvati come file stream. Per impostazione predefinita il valore è zero, il che significa che tutti gli stream verranno salvati come file stream.

3. La cartella in cui vengono salvati gli stream usando SaveDirectory, se non impostata, sarà la stessa in cui si trova l'applicazione.

4. Quando un client invia un multipart/form-data, il contenuto è codificato all'interno di boundary; se la proprietà RemoveBoundaries è abilitata, il contenuto dei boundary verrà estratto automaticamente dopo la ricezione completa dello stream. 

Codice di esempio

// 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.