Dosya yükleme file upload
bilinen diğer adları file upload · dosya seçici · sürükle-bırak alanı
Böyle diyorsan: "dosya sürükleme alanı" · "belge ekleme kutusu" → bunun adı dosya yükleme.
Dosya seçtiren ya da sürükle-bırak kabul eden alan.
Dosya yükleme alanı, kullanıcının cihazından dosya almanın yoludur ve iki yüzü vardır: yerleşik dosya seçici (her yerde çalışır) ve sürükle-bırak hedefi (hızlıdır ama YALNIZ fareyle çalışır). Bu yüzden sürükle-bırak asla tek yol olamaz — her zaman altında tıklanabilir bir 'dosya seç' düğmesi bulunmalıdır. Parçanın asıl zorluğu görünüşünde değil zamanındadır: yükleme uzun sürer, başarısız olabilir, yarıda kesilebilir. Yüzde göstermeyen, iptal ettirmeyen ve hata durumunda ne olduğunu söylemeyen bir yükleme alanı, kullanıcıyı ekrana bakıp beklemeye mahkûm eder.
Kapsam: Bu madde dosyanın seçilmesini ve yüklenmesini kapsar. Yüklenen görselin kırpılması ya da düzenlenmesi ayrı bir iştir; yükleme sırasındaki yüzde göstergesi ise İlerleme Çubuğu maddesindedir.
Yapıştır, sonuna belirtiyi ekle — ajana klasik hata kalıplarını önden verir.
- 1Bırakma alanı
dragover + preventDefaultKesikli çerçeveli hedef; preventDefault çağrılmazsa tarayıcı dosyayı SAYFA olarak açar.
- 2Dosya seçici
input type=file acceptTıkla-seç yedeği; accept mobilde doğru kaynağı açar (image/* kamerayı önerir).
- 3Dosya kartı + ilerleme
progress eventSeçilen her dosya: ad + boyut + GERÇEK yüzde (upload progress olayından, sahte animasyon değil).
- 4Hata + tekrar dene
tür/boyut reddiReddedilen dosya SEBEBİYLE listelenir ('5 MB sınırı') ve tek başına yeniden denenebilir.
- ABoş
input type=fileHenüz dosya yok. Kabul edilen türler ve boyut sınırı ÖNCEDEN yazılmalı: kullanıcı 40 MB'lık videoyu yükledikten sonra reddedilmemeli.
- BSürükleniyor
dragover + preventDefaultDosya alanın üstünde. preventDefault çağrılmazsa tarayıcı dosyayı sayfa olarak açar ve kullanıcı formu kaybeder — bu parçanın klasik hatasıdır.
- CYükleniyor
progress + iptalYüzde ilerliyor. Gerçek yüzde göster, sahte animasyon değil; ve iptal edilebilsin — yanlış dosyayı seçen kullanıcı beklemek zorunda kalmamalı.
- DBaşarılı
dosya listesiYüklendi. Dosya adı, boyutu ve kaldırma seçeneği görünür olmalı; 'yüklendi' yazıp dosyayı göstermemek güven vermez.
- EHatalı
tür / boyut / ağÜç ayrı sebep, üç ayrı mesaj. 'Yükleme başarısız' hiçbir şey söylemez: yanlış tür mü, çok mu büyük, bağlantı mı koptu?
| HTML | input type=file + accept | seçici + tür önerisi |
| JS | drop/dragover preventDefault + progress | gerçek sürükleme + gerçek yüzde |
| Güvenlik | sunucuda MIME/boyut doğrulama | client aldatılabilir |
- Sürükle-bırak asla tek yol olmasın. Sürükleme klavye ve çoğu yardımcı teknolojiyle yapılamaz; altında her zaman gerçek bir <input type="file"> ve tıklanabilir düğme bulunmalı.
- Gizlenen dosya girdisinin etiketi olmalı. Yaygın desen input'u gizleyip düğme göstermektir; bu durumda düğme gerçekten input'u tetiklemeli ve erişilebilir adı taşımalı.
- Yükleme durumunu duyur (role="status"): başlangıç, bitiş ve hata yalnız görsel bir çubukta kalırsa ekran okuyucu kullanıcısı ne olduğunu bilemez.
- Kabul edilen tür ve boyutu önceden yaz; accept özniteliği bir kolaylıktır, kullanıcıya söylenen kuralın yerine geçmez.
- Sunucuda MIME ve boyut doğrulaması yap. İstemci tarafı kontrol bir kullanılabilirlik özelliğidir, güvenlik önlemi değildir — atlanabilir.
İlerleme çubuğundan farkı. Dosya yükleme alanı işin KENDİSİDİR, ilerleme çubuğu o işin ne kadar ilerlediğini gösteren parçadır. İkisi birlikte çalışır ama karıştırılınca ortaya sahte bir çubuk çıkar: gerçek yüzdeyi bilmeden animasyon oynatmak, kullanıcıya bilgi vermek değil onu oyalamaktır.
Boş durumdan farkı. Boş yükleme alanı bir DAVETTİR: ne yapılacağını, hangi türün kabul edildiğini ve sınırı söyler. Boş durum ise zaten var olan bir listenin boşluğunu anlatır. İkisi de 'burada bir şey yok' der ama biri eylem ister, diğeri durumu açıklar.
- standartMDN — input type="file" ↗
accept, multiple ve dosya listesinin nasıl okunduğu.
- birincilWHATWG HTML — Forms ↗
Dosya girdisinin standarttaki tanımı ve gönderim davranışı.
- standartW3C — WCAG 2.2, Labels or Instructions (3.3.2) ↗
Tür ve boyut kurallarının önceden söylenmesi şartı.
İlerleme çubuğu progress barBoş durum empty stateForm alanı form fieldKısa bildirim toast / snackbar