HTTP Post Big Files

· Özellikler

sgcWebSockets Sunucuları, sunucu belleğini etkilemeden Büyük Dosyaların Gönderilmesine olanak tanır. 

Bir HTTP istemcisi bir multipart/form-data akışı gönderdiğinde, akış sunucu tarafından bellekte saklanır. Dosyalar büyük olduğunda sunucu bir bellek yetersizliği istisnası alabilir; bu istisnaları önlemek için sunucunun HTTPUploadFiles adlı bir özelliği vardır; burada POST akışlarının nasıl işleneceğini yapılandırabilirsiniz: bellekte mi yoksa dosya akışları olarak mı. Akışlar dosya akışları olarak işlenirse, alınan akışlar doğrudan sabit diske kaydedilir; böylece bellek sorunları önlenir.

Sunucu Yapılandırması 

Sunucunuzu multipart/form-data akışlarını dosya akışları olarak kaydedecek şekilde yapılandırmak için aşağıdaki adımları izleyin:

1. HTTPUploadFiles.StreamType = pstFileStream özelliğini ayarlayın. Bu kurulumu kullanarak sunucu bu akışları sabit diskte saklayacaktır.

2. Dosyaların dosya akışı olarak saklanacağı bayt cinsinden minimum boyutu yapılandırabilirsiniz. Varsayılan olarak değer sıfırdır; bu da tüm akışların dosya akışı olarak saklanacağı anlamına gelir.

3. Akışların SaveDirectory kullanılarak saklandığı klasör ayarlanmamışsa, uygulamanın bulunduğu klasörde saklanır.

4. Bir istemci bir multipart/form-data gönderdiğinde, içerik sınırlar (boundaries) içinde kodlanır; RemoveBoundaries özelliği etkinleştirilirse, sınırların içeriği tam akış alındıktan sonra otomatik olarak çıkarılır. 

Örnek Kod

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