Açıkçası, cevap hayır . Bir geliştirici , kullanıcının herhangi bir türde veya uzantıda dosya yüklemesini engelleyemez.
Ancak yine de, öğesinin accept özelliği <input type = "file">
, işletim sisteminin dosya seçimi iletişim kutusunda bir filtre sağlanmasına yardımcı olabilir. Örneğin,
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox 42+) -->
<input type="file" accept=".xls,.xlsx" />
.xls veya .xlsx dışındaki dosyaları filtrelemek için bir yol sağlamalıdır. Öğe için MDN sayfası input
her zaman bunu desteklediğini söylese de, sürpriz olarak, bu sürüm 42'ye kadar Firefox'ta benim için işe yaramadı. Bu IE 10+, Edge ve Chrome'da çalışıyor.
IE 10+, Edge, Chrome ve Opera ile birlikte 42'den eski Firefox'u desteklemek için, sanırım MIME türlerinin virgülle ayrılmış listesini kullanmak daha iyidir:
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
[ Edge (EdgeHTML) davranışı: Dosya türü filtresi açılır menüsü, burada belirtilen dosya türlerini gösterir, ancak açılır menüdeki varsayılan değer değildir. Varsayılan filtre şudur All files (*)
.]
MIME türlerinde yıldız işaretleri de kullanabilirsiniz. Örneğin:
<input type="file" accept="image/*" /> <!-- all image types -->
<input type="file" accept="audio/*" /> <!-- all audio types -->
<input type="file" accept="video/*" /> <!-- all video types -->
W3C, yazarlara özellikte hem MIME türlerini hem de karşılık gelen uzantıları belirtmelerini öneriraccept
. Yani, en iyi yaklaşım:
<!-- Right approach: Use both file extensions and corresponding MIME-types. -->
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept=".xls,.xlsx, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
JSFiddle aynı: burada .
Başvuru: MIME türlerinin listesi
ÖNEMLİ:accept
Özniteliğin kullanılması, yalnızca ilgilenilen tür dosyalarına filtre uygulamak için bir yol sağlar. Tarayıcılar yine de kullanıcıların herhangi bir türde dosya seçmesine izin verir. Ek (istemci tarafında) kontroller yapılmalıdır (JavaScript kullanarak, tek yol olacaktır bu ), ve kesinlikle dosya türlerini sunucuda doğrulanacak GEREKİR (dosya uzantısı ve onun ikili imza ikisini de kullanarak MIME tipi bir arada kullanarak, ASP .NET , PHP , Ruby , Java ). Ayrıca dosya türleri ve sihirli numaraları için bu tablolara başvurmak isteyebilirsiniz, daha sağlam bir sunucu tarafı doğrulaması yapmak için.
İşte dosya yüklemeleri ve güvenlik hakkında üç iyi okuma .
DÜZENLEME: İkili imzasını kullanarak dosya türü doğrulaması HTML5 Dosya API'sı kullanılarak JavaScript kullanılarak (yalnızca uzantıya bakmak yerine) istemci tarafında da yapılabilir, ancak yine de dosyanın kötü niyetli bir kullanıcı tarafından doğrulanması gerekir. yine de özel bir HTTP isteği yaparak dosya yükleyebilir.