HTML: Dosya yüklemesini yalnızca resimlerle nasıl sınırlayabilirim?


126

HTML ile ne tür dosya türlerinin yüklenebileceğini nasıl sınırlayabilirim?

Kullanıcı deneyimini kolaylaştırmak için dosya yüklemelerini yalnızca resimlerle (jpeg, gif, png) sınırlamak istiyorum.

<form method="post" action="..." enctype="multipart/form-data">
<label for="image">Photo</label>
<input name="image" type="file" />
</form>

Açıkçası, bunu güvenli bir şekilde sağlamak için - arka uç / sunucu tarafında kontrol ederdim. Ancak tüm aradığım, yüklemek istedikleri görseli bulmak için "göz at" ı tıkladıklarında, geçerli olmayan tüm bu kelime belgelerini vb. Görmek zorunda kalmayacakları şekilde, basit bir kullanıcı deneyiminin bir yolu. yükleme
JacobT

Bir dosya maskesi ayarlayabileceğinizi bilmiyorum. Başarıyla yapıldığını hiç görmedim.
Robert K

Yanıtlar:


230

HTML5 diyor <input type="file" accept="image/*">. Elbette, istemci tarafı doğrulamaya asla güvenmeyin: Her zaman sunucu tarafında tekrar kontrol edin ...


87

HTML5 Dosya girişi, kabul özelliğine ve ayrıca birden çok özelliğe sahiptir. Birden çok öznitelik kullanarak, bir örnekte birden çok görüntü yükleyebilirsiniz.

<input type="file" multiple accept='image/*'>

Birden çok mime türünü de sınırlayabilirsiniz.

<input type="file" multiple accept='image/*|audio/*|video/*' >

ve dosya nesnesini kullanarak mime türünü kontrol etmenin başka bir yolu.

dosya nesnesi size ad, boyut ve tür verir.

var files=e.target.files;

var mimeType=files[0].type; // You can get the mime type

Ayrıca, yukarıdaki kodla kullanıcının bazı dosya türleri için yüklenmesini kısıtlayabilirsiniz.


4
image/*|audio/*|video/*benim için çalışmıyor, virgülle ayrılmış olmalı, öyle görünüyor:image/*,video/mp4,.txt
serg

MimeType'ı kontrol etmek için harika! Tx!
Pedro Ferreira

6

Düzenlenen

Her şey olması gerektiği gibi olsaydı, bunu "Kabul Et" özniteliğiyle yapabilirsiniz.

http://www.webmasterworld.com/forum21/6310.htm

Ancak, tarayıcılar bunu hemen hemen görmezden gelir, bu yüzden bu önemsizdir. Kısa cevap, bunu HTML ile yapmanın bir yolu olduğunu düşünmüyorum. Bunun yerine sunucu tarafında kontrol etmeniz gerekir.

Aşağıdaki eski gönderi, alternatifler konusunda size yardımcı olabilecek bazı bilgiler içeriyor.

Dosya girişi 'kabul et' özelliği - yararlı mı?


6

Resim yükleme için HTML burada. Varsayılan olarak, koyduğumuz için görüntü dosyalarını yalnızca göz atma penceresinde gösterecektir accept="image/*". Ancak yine de açılır menüden değiştirebiliriz ve tüm dosyaları gösterecektir. Böylece Javascript bölümü, seçilen dosyanın gerçek bir görüntü olup olmadığını doğrular.

 <div class="col-sm-8 img-upload-section">
     <input name="image3" type="file" accept="image/*" id="menu_images"/>
     <img id="menu_image" class="preview_img" />
     <input type="submit" value="Submit" />
 </div> 

Burada değişiklik olayında önce resmin boyutunu kontrol ediyoruz. Ve ikinci ifdurumda, bir görüntü dosyası olup olmadığını kontrol ederiz.

this.files[0].type.indexOf("image")-1bir resim dosyası değilse olacaktır .

document.getElementById("menu_images").onchange = function () {
    var reader = new FileReader();
    if(this.files[0].size>528385){
        alert("Image Size should not be greater than 500Kb");
        $("#menu_image").attr("src","blank");
        $("#menu_image").hide();  
        $('#menu_images').wrap('<form>').closest('form').get(0).reset();
        $('#menu_images').unwrap();     
        return false;
    }
    if(this.files[0].type.indexOf("image")==-1){
        alert("Invalid Type");
        $("#menu_image").attr("src","blank");
        $("#menu_image").hide();  
        $('#menu_images').wrap('<form>').closest('form').get(0).reset();
        $('#menu_images').unwrap();         
        return false;
    }   
    reader.onload = function (e) {
        // get loaded data and render thumbnail.
        document.getElementById("menu_image").src = e.target.result;
        $("#menu_image").show(); 
    };

    // read the image file as a data URL.
    reader.readAsDataURL(this.files[0]);
};

Lütfen açıklama ekleyin.
Paul Swetz

Lütfen yukarıdakilerin jquery gerektirdiğini, ancak bunu söylemediğini unutmayın. Anlamak için yeterince kolay, ancak ifade etmesi yararlı. Bunun için bir keman yarattım . Başka şeyler de yapar (bir proje için gerekli olduğu üzere), ancak kavram hemen hemen aynıdır.
Dave Land

2
<script>

    function chng()
    {
        var typ=document.getElementById("fiile").value;
        var res = typ.match(".jp");

        if(res)
        {
            alert("sucess");
        }
        else
        {
            alert("Sorry only jpeg images are accepted");
            document.getElementById("fiile").value="; //clear the uploaded file
        }
    }

</script>

Şimdi html bölümünde

<input type="file" onchange="chng()">

bu kod, yüklenen dosyanın bir jpg dosyası olup olmadığını kontrol edecek ve diğer türlerin yüklenmesini kısıtlayacaktır.


Bu kontrol, dosya uzantısının basit bir şekilde yeniden adlandırılmasıyla bozulur. Böyle bir şey yapacaksanız, en azından veri URI tipini kontrol etmelisiniz.
Lucas Leblanc

1

Bunu yalnızca sunucu tarafında güvenli bir şekilde yapabilirsiniz. "Kabul et" özniteliğinin kullanılması iyidir, ancak kullanıcıların bu sınırlama olmaksızın komut dosyanızı cURL yapabilmeleri için sunucu tarafında da doğrulanması gerekir.

Size şunu öneririm: herhangi bir resimsiz dosyayı atın, kullanıcıyı uyarın ve formu yeniden görüntüleyin.


0

Son olarak, Gözat penceresinde görüntülenen filtre tarayıcı tarafından ayarlanır. Kabul et özniteliğinde istediğiniz tüm filtreleri belirtebilirsiniz, ancak kullanıcınızın tarayıcısının buna uyacağına dair hiçbir garantiniz yoktur.

En iyi bahsiniz, sunucuda arka uçta bir tür filtreleme yapmaktır.


0

Uploadify adlı bir projeye göz atın. http://www.uploadify.com/

Flash + jQuery tabanlı bir dosya yükleyicidir. Bu, size dosya türlerini filtreleme, aynı anda birden çok dosya seçme vb. Beceriler sağlayan Flash'ın dosya seçme iletişim kutusunu kullanır.


30
Flash? ... mümkün değil!
ErickBest

14
Şimdiye kadarki en kötü çözüm.
Matteo Mosconi

1
Beyler, bunun neden şimdiye kadarki en kötü çözüm olduğunu anlamıyorum. Flash'ın ortadan kalkacağı doğru olsa da, hala eski tarayıcılar tarafından kullanılıyor - çok eski, tamam, ancak hala kullanılıyor - ve bu çözümün her iki türü de var: jQuery + HTML5 ve Flash fallback. Bu, tarayıcının videoyu oynatamaması durumunda Flash yedeği olan VideoJS kadar iyidir ... Çözümü test etmedim, en iyisi olmayabilir, ancak olumsuz oylar adil değil.
Unapedra

1
+1 Aptalca olumsuz oylama. Flash ortadan kalkıyor ancak iyi bir geri dönüşü var. Google'ın yuva geri dönüşü için gmail için ne kullandığını düşünüyorsunuz? Aptal.
Jason Sebring

8
Bu cevap 4 yaşında. O zamanlar, birden fazla dosya seçimi için HTML5 desteği veya seçilen dosya penceresini kabul edilen türlere göre filtreleme, büyük tarayıcıların hiçbirinde iyi desteklenmiyordu. Bu, o zamanlar birçokları için işe yarayacak bir çözümdü, ancak şimdi saf bir HTML5 çözümüne geçecektim.
AndrewR
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.