lilydocs
HTTP APIWebSocketConsumer
Teknikler2 dk okuma

Dosya sunma ve streaming

Bir dosya kökünü HTTP’ye açın veya uygulamanın byte akışını lazy response olarak gönderin.

Dosyayı diskteki kökten sunmak için StaticFileMount, uygulamanın ürettiği byte parçalarını göndermek için StreamingResponse kullanın.

Static file mount#

Mount’u controller constructor’ında bir kez oluşturun. Dizin build’den önce mevcut olmalıdır:

Controller constructor parçası
let mount = StaticFileMount::new("./public", "/files/public").await
    .map_err(ControllerInitError::invalid_configuration)?;
Ok(Self { mount })

Controller mount: StaticFileMount alanını tutar. /files base path’inde route’u açıkça ekleyin:

Controller action parçası
#[get("/public/*path")]
async fn public_file(&self, request: &mut Request)
    -> Result<StaticFileResponse, HttpApiError>
{
    Ok(self.mount.serve(request).await?)
}

public/report.txt dosyası /files/public/report.txt altında sunulur. GET/HEAD, conditional ETag/Last-Modified, single range, MIME, cache ve root sınırı davranışları bu response yolunun parçasıdır. Varsayılan symlink politikası deny’dır.

Byte streaming#

futures = "0.3" ekleyin. std::convert::Infallible ve facade’dan streaming, Bytes, StreamingResponse import edin:

Controller action parçası
#[get("/export")]
async fn export(&self) -> StreamingResponse {
    let source = futures::stream::iter([
        Ok::<_, Infallible>(Bytes::from_static(b"{\"id\":1}\n")),
        Ok(Bytes::from_static(b"{\"id\":2}\n")),
    ]);
    streaming(source)
        .content_type("application/x-ndjson")
        .max_chunk_bytes(1024)
}

Yanıt iki NDJSON satırı üretir. Tam controller örneği, import’ları ve mount alanını birlikte içerir.

Kaynak ve süre sınırı#

Lazy producer handler döndükten sonra çalışabilir. Middleware’in normal dönüşü client’a bütün byte’ların teslim edildiği anlamına gelmez. Request scope’u ilgili kaynakların sonlanmasıyla birlikte kapatılır.

Varsayılan stream item sınırı 64 KiB’dir; toplam stream byte sınırı None olsa bile chunk ve deadline sınırları sürer. Stream, admission’da başlayan request deadline’ına tabidir. Cancellation geldiğinde producer’ın buna uyumlu davranması gerekir.

Bu sayfanın kaynakları v0.1.0

Anlatım, incelenen framework commit’ine dayanır.

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod