File upload
Multipart form’dan typed dosya ve metin alanlarını alın; boyut sınırlarını belirleyin.
MultipartForm<T> multipart gövdesini text ve file alanlarına ayırır. Bu işlem sınırlandırılmış, buffered parsing yapar. Dosyanın kalıcı saklanması uygulama koduna aittir.
Multipart DTO#
#[derive(MultipartForm)]
struct UploadInput {
title: String,
#[form_file]
attachment: FormFile,
}
#[derive(serde::Serialize)]
struct UploadInfo { title: String, bytes: usize }MultipartForm ve FormFile, lily_http_api üzerinden gelir. Controller’a aşağıdaki action’ı ekleyin:
#[post("/upload")]
async fn upload(&self, MultipartForm(input): MultipartForm<UploadInput>)
-> Result<UploadInfo, HttpApiError>
{
Ok(UploadInfo { title: input.title, bytes: input.attachment.len() })
}/files base path’iyle örnek istek:
curl -i http://127.0.0.1:8080/files/upload \
-F 'title=Profil görseli' \
-F 'attachment=@./avatar.png'Yanıt başlığı ve byte sayısını verir; dosyayı diske veya object store’a kaydetmez. Tam controller örneğini indirin. Bu birleşik örnekte static-file mount bulunduğundan başlangıçtan önce public klasörü oluşturun ve futures = "0.3" ekleyin.
Alan kuralları#
Multipart derive text için String, Option<String>, Vec<String>; dosya için FormFile, Option<FormFile>, Vec<FormFile> şekillerini destekler. File alanları #[form_file] taşır. Bilinmeyen alan, duplicate scalar ve eksik required alan reddedilir. Text alanını file gibi veya file alanını text gibi göndermek geçerli kabul edilmez. Gerekli, opsiyonel ve tekrarlı alan tercihlerini DTO’nuzda belirleyin.
Upload sınırları#
Varsayılan part sınırı 8 MiB, part sayısı 128, metadata sınırı 16 KiB’dir. Toplam request body sınırı ayrıca uygulanır. HttpTransportConfig ile sınırları daraltırken part limitinin body limitinden büyük kalmamasına dikkat edin.
Filename ve istemci MIME bildirimi güvenilir storage yolu veya dosya tipi kanıtı değildir. Saklama adını ve izin verilen içerik politikasını uygulamanız seçmelidir.
Büyük request’ler#
Multipart bu yolda buffered’dır. Büyük byte akışını parça parça işlemek için BodyStream::next_chunk yolunu değerlendirin; body ownership kurallarını koruyun. Upload ve dosya sunma ayrı yönlerdeki işlemlerdir.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.