Yükleme sırasında jQuery dosya türlerini nasıl kısıtlayabilirim?


133

JQuery sadece jpg / jpeg, png ve gif bir dosya yükleme alanı sınırlamak istiyorum. Ben PHPzaten ile arka uç kontrol yapıyorum . Gönder düğmemi JavaScriptzaten bir işlev aracılığıyla çalıştırıyorum, bu yüzden gerçekten sadece göndermeden veya uyarmadan önce dosya türlerini nasıl kontrol edeceğinizi bilmem gerekiyor.

Yanıtlar:


280

Bir dosya alanının değerini diğer tüm alanlarla aynı şekilde alabilirsiniz. Ancak bunu değiştiremezsiniz.

Dolayısıyla, bir dosyanın doğru uzantıya sahip olup olmadığını yüzeysel olarak kontrol etmek için şöyle bir şey yapabilirsiniz:

var ext = $('#my_file_field').val().split('.').pop().toLowerCase();
if($.inArray(ext, ['gif','png','jpg','jpeg']) == -1) {
    alert('invalid extension!');
}

18
Ve formunuza $("#my_upload_form").bind("submit", function() { // above check });
bağlayın

7
kullanabilirsiniz$('#file_field').change(function(){// above check});
makki

3
$("#my_upload_form").bind("submit", function() { // above check });şimdi $("#my_upload_form").submit(function() { // above check }); api.jquery.com/submit kullanılarak bağlanmalıdır . ayrıca formun gönderilmesini engelleyebilirsiniz$("#my_upload_form").submit(function(e) { // above check e.preventDefault(); });
Liam

1
Bu durumda, kullanıcı ".jpg" örneğin MS Word dosyasına eklerse, FileUpload bu dosyayı resim olarak kabul eder. Bence bu doğru değil.
Jeyhun

3
Bunun aptalca bir yöntem olmadığını belirtmeye değer .. Günün sonunda, arka ucunuzun gerçekten olmasını istediğiniz dosya türünü etkilediğinden emin olmak için dosyanın ilk birkaç baytını kontrol ettiğinden emin olun. Düşünülmesi gereken başka bir şey, linux ve osx'ta aslında istediğiniz tipte bir uzantı olmadan bir dosyaya sahip olabilirsiniz ... bu yüzden bu da başarısız olur
chris

39

Sadece bu görev için eklenti gerekmez. Bunu birkaç senaryodan birlikte topladı:

$('INPUT[type="file"]').change(function () {
    var ext = this.value.match(/\.(.+)$/)[1];
    switch (ext) {
        case 'jpg':
        case 'jpeg':
        case 'png':
        case 'gif':
            $('#uploadButton').attr('disabled', false);
            break;
        default:
            alert('This is not an allowed file type.');
            this.value = '';
    }
});

Buradaki hile, geçerli bir dosya türü seçilmedikçe ve yüklenene kadar karşıya yükleme düğmesini devre dışı olarak ayarlamaktır.


6
üzgünüm kardeşim, ama bu kötü bir ifade. dosyaların adında noktalar olmasına izin verilir. "giel.asd.aaaaa.jpg.png". maç (/\.(.+)$/)
Tim Kretschmer

27

JQuery için doğrulama eklentisini kullanabilirsiniz: http://docs.jquery.com/Plugins/Validation

Tam olarak ihtiyacınız olanı yapan bir accept () kuralına sahip olur: http://docs.jquery.com/Plugins/Validation/Methods/accept#extension

Dosya uzantısını kontrol etmenin, dosyanın mime türü ile hiçbir şekilde ilişkili olmadığından kurşun geçirmez olmadığını unutmayın. Yani bir kelime belgesi olan bir .png ve mükemmel derecede geçerli bir png resmi olan bir .doc olabilir. Yani sunucu tarafında daha fazla kontrol yapmayı unutmayın;)


IE11'de plugins.krajee.com/file-input#option-allowedfileextensions ile nasıl kullanılacağına örnek verebilir misiniz
shorif2000

25

Ön uç için, bir dosya alanı kullanıyorsanız ' kabul ' niteliği koymak oldukça uygundur .

Misal:

<input id="file" type="file" name="file" size="30" 
       accept="image/jpg,image/png,image/jpeg,image/gif" 
/>

Birkaç önemli not:


1
JQuery kullanmaktan çok daha iyi
Christopher Grigg

19

MIME üzerinde kullanıcının yalan söylediği herhangi bir uzantıdan ziyade kontrol etmek istemiyor musunuz? Eğer öyleyse, o zaman birden fazla satır vardır:

<input type="file" id="userfile" accept="image/*|video/*" required />

ihtiyacı olanı alamıyor. yalnızca farklı uzantıya sahip bir klasörden bir resim seçmek için daha kolay kullanım içindir. burada görebileceğiniz gibi -> imageshack.us/a/img20/8451/switchzz.jpg
bernte

IE <10'a zarar vermediği ve diğer kodlara zarar vermediği için, kısıtlamaya çalıştığınız şey üzerinde etkili bir kısıtlamadır.
Leo

4

benim durumum için aşağıdaki kodları kullandım:

    if (!(/\.(gif|jpg|jpeg|tiff|png)$/i).test(fileName)) {              
    alert('You must select an image file only');               
    }

3

Çalışma kodu örneği yazmaya çalışıyorum, test ediyorum ve her şey çalışıyor.

Tavşan kodu:

HTML:

<input type="file" class="attachment_input" name="file" onchange="checkFileSize(this, @Model.MaxSize.ToString(),@Html.Raw(Json.Encode(Model.FileExtensionsList)))" />

JavaScript:

 //function for check attachment size and extention match
function checkFileSize(element, maxSize, extentionsArray) {
    var val = $(element).val(); //get file value

    var ext = val.substring(val.lastIndexOf('.') + 1).toLowerCase(); // get file extention 
    if ($.inArray(ext, extentionsArray) == -1) {
        alert('false extension!');
    }

    var fileSize = ($(element)[0].files[0].size / 1024 / 1024); //size in MB
    if (fileSize > maxSize) {
        alert("Large file");// if Maxsize from Model > real file size alert this
    }
}

1

Bu kod iyi çalışıyor, ancak tek sorun dosya formatı belirtilen seçeneklerden farklıysa, bir uyarı mesajı gösterir, ancak ihmal edilmesi gereken dosya adını görüntüler.

$('#ff2').change(
                function () {
                    var fileExtension = ['jpeg', 'jpg', 'pdf'];
                    if ($.inArray($(this).val().split('.').pop().toLowerCase(), fileExtension) == -1) {
                        alert("Only '.jpeg','.jpg','.pdf' formats are allowed.");
                        return false; }
});

1

Bu örnek yalnızca PNG görüntüsünün yüklenmesine izin verir.

HTML

<input type="file" class="form-control" id="FileUpload1" accept="image/png" />

JS

$('#FileUpload1').change(
                function () {
                    var fileExtension = ['png'];
                    if ($.inArray($(this).val().split('.').pop().toLowerCase(), fileExtension) == -1) {
                        alert("Only '.png' format is allowed.");
                        this.value = ''; // Clean field
                        return false;
                    }
                });

Lütfen resim boyutunun nasıl kısıtlanacağını önerebilir misiniz? Örneğin, 10mb boyutunda resim kabul edilmemelidir
PDSSandeep

@PDSSandeep Bu bağlantıyı kontrol edin pls stackoverflow.com/questions/6575159/…
Geliştirici

0
<form enctype="multipart/form-data">
   <input name="file" type="file" />
   <input type="submit" value="Upload" />
</form>
<script>
$('input[type=file]').change(function(){
    var file = this.files[0];
    name = file.name;
    size = file.size;
    type = file.type;
    //your validation
});
</script>

Bu, FF'de test edilen dosya türünü ve boyutunu kontrol edemez.
Qammar Feroz

0

Birden fazla (html 5) dosya yüklemesi ile ilgileniyorsanız, önerilen en iyi yorumu aldım ve biraz değiştirdim:

    var files = $('#file1')[0].files;
    var len = $('#file1').get(0).files.length;

    for (var i = 0; i < len; i++) {

        f = files[i];

        var ext = f.name.split('.').pop().toLowerCase();
        if ($.inArray(ext, ['gif', 'png', 'jpg', 'jpeg']) == -1) {
            alert('invalid extension!');

        }
    }

0
    $("input[name='btnsubmit']").attr('disabled', true);
    $('input[name="filphoto"]').change(function () {
    var ext = this.value.match(/\.(.+)$/)[1];
    switch (ext) 
    {
    case 'jpg':
    case 'jpeg':
    case 'png':
    case 'bmp':
        $("input[name='btnsubmit']").attr('disabled', false);
    break;
    default:
        alert('This is not an allowed file type.');
        $("input[name='btnsubmit']").attr('disabled', true);
        this.value = '';

-1
function validateFileExtensions(){
        var validFileExtensions = ["jpg", "jpeg", "gif", "png"];
        var fileErrors = new Array();

        $( "input:file").each(function(){
            var file = $(this).value;
            var ext = file.split('.').pop();
            if( $.inArray( ext, validFileExtensions ) == -1) {
                fileErrors.push(file);
            }
        });

        if( fileErrors.length > 0 ){
            var errorContainer = $("#validation-errors");
            for(var i=0; i < fileErrors.length; i++){
                errorContainer.append('<label for="title" class="error">* File:'+ file +' do not have a valid format!</label>');
            }
            return false;
        }
        return true;
    }

-1

Javascript doğrulaması için basit bir kod ve doğruladıktan sonra giriş dosyasını temizleyecektir.

<input type="file" id="image" accept="image/*" onChange="validate(this.value)"/>

function validate(file) {
    var ext = file.split(".");
    ext = ext[ext.length-1].toLowerCase();      
    var arrayExtensions = ["jpg" , "jpeg", "png", "bmp", "gif"];

    if (arrayExtensions.lastIndexOf(ext) == -1) {
        alert("Wrong extension type.");
        $("#image").val("");
    }
}
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.