Post Big Files

Destekleyen

 

TsgcWebSocketHTTPServer

TsgcWebSocketServer_HTTPAPI

 

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 yetersiz 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 veya dosya akışları olarak. Akışlar dosya akışları olarak işlenirse, alınan akışlar doğrudan sabit diske kaydedilir, böylece bellek sorunları önlenir.

 

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 stream'leri sabit diskte saklar.

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. Stream'lerin SaveDirectory kullanılarak saklandığı klasör; ayarlanmamışsa, uygulamanın bulunduğu aynı klasörde saklanır.

4. Bir istemci bir multipart/form-data gönderdiğinde, içerik sınırların içinde kodlanır; eğer RemoveBoundaries özelliği etkinse, sınırların içeriği tam stream alındıktan sonra otomatik olarak çıkarılır.

 

Örnek Kod

 

Önce yeni bir sunucu örneği oluşturun ve Stream'lerin Dosya Stream'leri olarak kaydedildiğini ayarlayın.

 


oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.Port := 5555;
oServer.HTTPUploadFiles.StreamType := pstFileStream;
oServer.Active := True;

Ardından aşağıdaki yapılandırmaya sahip yeni bir html dosyası oluşturun

 

<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" accept-charset="UTF-8">

<input type="file" name="file_1" />

<input type="submit" />

</form>

</body>

</html>

 

Son olarak html dosyasını bir web tarayıcısıyla açın ve sunucuya bir dosya gönderin. Sunucu, ".sgc_ps" uzantılı yeni bir dosya akışı oluşturur ve akış tamamen alındığında, dosyayı sınırlardan çıkarır.

 

Olaylar

Dosya yükleme akışını özelleştirmek için kullanılabilecek 2 olay vardır (HTTPUploadFiles.RemoveBoundaries özelliğinin etkinleştirilmesini gerektirir)

 

OnHTTPUploadBeforeSaveFile

 

Bu olay, dosya kaydedilmeden ÖNCE tetiklenir ve alınan dosyanın adının özelleştirilmesine olanak tanır.


procedure OnHTTPUploadBeforeSaveFileEvent(Sender: TObject; var aFileName: string; var aFilePath: string);
begin
  if aFileName = "test.jpg" then
    aFileName := "custom_test.jpg";
end;

OnHTTPUploadAfterSaveFile

 

Bu olay, dosya kaydedildikten SONRA tetiklenir ve kaydedilen dosyanın adını bilmenize olanak tanır.


procedure OnHTTPUploadBeforeSaveFileEvent(Sender: TObject; const aFileName: string; const aFilePath: string);
begin
  DoLog("File Received: " + aFileName);end;

 

OnHTTPUploadReadInput

 

Bu olay, çözücü dosya girişinden farklı alınan bir giriş değeri okuduğunda tetiklenir (örneğin: formun name, date... gibi bazı değişkenleri varsa).


procedure OnHTTPUploadReadInputEvent(Sender: TObject; const aName: string; const aValue: string);
begin
  DoLog("Input value received: " + aName + ":" + aValue);end;