blueimp dosya yükleme eklentisindeki maxFileSize ve acceptFileTypes çalışmıyor. Neden?


85

Dosyaları yüklemek için Blueimp jQuery dosya yükleme eklentisini kullanıyorum.

Yüklemede sorun yaşamadım ama seçenek maxFileSizeve acceptFileTypesçalışmıyor.

Bu benim kodum:

$(document).ready(function () {
    'use strict';

    $('#fileupload').fileupload({
        dataType: 'json',
        autoUpload: false,
        acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
        maxFileSize: 5000000,
        done: function (e, data) {
            $.each(data.result.files, function (index, file) {
                $('<p style="color: green;">' + file.name + '<i class="elusive-ok" style="padding-left:10px;"/> - Type: ' + file.type + ' - Size: ' + file.size + ' byte</p>')
                    .appendTo('#div_files');
            });
        },
        fail: function (e, data) {
            $.each(data.messages, function (index, error) {
                $('<p style="color: red;">Upload file error: ' + error + '<i class="elusive-remove" style="padding-left:10px;"/></p>')
                    .appendTo('#div_files');
            });
        },
        progressall: function (e, data) {
            var progress = parseInt(data.loaded / data.total * 100, 10);

            $('#progress .bar').css('width', progress + '%');
        }
    });
});

Merhaba, bu kodu dosya yükleme için uygulamaya çalışıyorum ancak Dosya yükle hatası: Yüklenen bayt dosya boyutunu aşıyor şeklinde bir hata alıyorum Lütfen sorunun ne olduğunu önerebilir misiniz?
Jay Maharjan

2
@JayMaharjan maxFileSize'nin doğru şekilde yapılandırıldığından emin misiniz?
YoBre

1
Php.ini'de uygun konfigürasyonu yaptıktan sonra artık büyük dosyalar yükleyebiliyorum. Yardımın için teşekkürler. :)
Jay Maharjan

Benim durumum için, gif yeniden boyutlandırılıyor ve png'ye dönüştürülüyordu ve ardından gif filtresi açıkça başarısız oldu. Ve garip bir şekilde, ne olduğunu anladığım anda kendi kendine çalışmaya başladı, kütüphanede bir şey yapıp yapmadığımı iki kez kontrol ettim ama hiçbir şey, koyduğum tek şey çıkardığım ve hala çalıştığım konsol günlükleriydi. Bu, birisine yardımcı olabilir.
Zia Ul Rehman Mughal

Yanıtlar:


135

Aynı sorunu yaşadım ve blueimp adamı " maxFileSize ve acceptFileTypes yalnızca UI sürümü tarafından destekleniyor " diyor ve _validate ve _hasError yöntemlerini dahil etmek için (bozuk) bir bağlantı sağladı.

Bu yöntemleri senaryoyu bozmadan nasıl birleştireceğimi bilmeden bu küçük işlevi yazdım. Benim için çalışıyor gibi görünüyor.

Sadece bunu ekle

add: function(e, data) {
        var uploadErrors = [];
        var acceptFileTypes = /^image\/(gif|jpe?g|png)$/i;
        if(data.originalFiles[0]['type'].length && !acceptFileTypes.test(data.originalFiles[0]['type'])) {
            uploadErrors.push('Not an accepted file type');
        }
        if(data.originalFiles[0]['size'].length && data.originalFiles[0]['size'] > 5000000) {
            uploadErrors.push('Filesize is too big');
        }
        if(uploadErrors.length > 0) {
            alert(uploadErrors.join("\n"));
        } else {
            data.submit();
        }
},

burada kodunuzda gösterildiği gibi .fileupload seçeneklerinin başlangıcında

$(document).ready(function () {
    'use strict';

    $('#fileupload').fileupload({
        add: function(e, data) {
                var uploadErrors = [];
                var acceptFileTypes = /^image\/(gif|jpe?g|png)$/i;
                if(data.originalFiles[0]['type'].length && !acceptFileTypes.test(data.originalFiles[0]['type'])) {
                    uploadErrors.push('Not an accepted file type');
                }
                if(data.originalFiles[0]['size'].length && data.originalFiles[0]['size'] > 5000000) {
                    uploadErrors.push('Filesize is too big');
                }
                if(uploadErrors.length > 0) {
                    alert(uploadErrors.join("\n"));
                } else {
                    data.submit();
                }
        },
        dataType: 'json',
        autoUpload: false,
        // acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
        // maxFileSize: 5000000,
        done: function (e, data) {
            $.each(data.result.files, function (index, file) {
                $('<p style="color: green;">' + file.name + '<i class="elusive-ok" style="padding-left:10px;"/> - Type: ' + file.type + ' - Size: ' + file.size + ' byte</p>')
                .appendTo('#div_files');
            });
        },
        fail: function (e, data) {
            $.each(data.messages, function (index, error) {
                $('<p style="color: red;">Upload file error: ' + error + '<i class="elusive-remove" style="padding-left:10px;"/></p>')
                .appendTo('#div_files');
            });
        },
        progressall: function (e, data) {
            var progress = parseInt(data.loaded / data.total * 100, 10);

            $('#progress .bar').css('width', progress + '%');
        }
    });
});

Orada da bir dosya boyutu işlevi eklediğimi fark edeceksiniz çünkü bu sadece UI sürümünde de çalışacak.

@Lopsided tarafından önerilen eski sorunu almak için güncellendi: Hataların test edilmesinden önce var olduklarından ve boş olmadıklarından emin olmak için sorgulara data.originalFiles[0]['type'].lengthve eklendi data.originalFiles[0]['size'].length. Mevcut değilse, hiçbir hata gösterilmez ve yalnızca sunucu tarafı hata testinize dayanır.


Bu gerçekten kullanışlıdır. Bununla birlikte data.originalFiles[0]['type'], Dosya API'sini desteklemeyen bir tarayıcıdan yüklerken boş olduğuna dikkat edilmelidir . Android telefonumdaki durum buydu. Yaptığım şey, bu değer yoksa onu geçmek ve ardından sunucu tarafı mime türü doğrulamasına geri dönmekti. Aksi takdirde acceptFileTypes.testçizgiyi asla
geçemezsiniz

@lopsided bu garip, Android telefonumda data.originalFiles [0] ['type'] ve ['size'] değerini alıyorum ve her iki testi de geçiyor. Aslında telefonumda her şeyin hatasız çalışıyor gibi göründüğü ancak dosyanın yüklenmediği sorun yaşıyorum. Başka hiçbir yerde sorun yok, sadece Android.
PaulMrG

8
'Data.originalFiles [0] [' size ']. Length' koşulunun kullanımdan kaldırıldığını ve bu nedenle her zaman yanlış döndürdüğünü düşünüyorum.
kkocabiyik

5
Data.files [0] ['size'] ve data.files [0] ['type'] kullanın
Jose

2
'Uzunluk' olmadan (data.originalFiles [0] ['size'] && data.originalFiles [0] ['size']> 500000) kullanma? 'true': 'false' iyi çalışıyor, ancak herhangi bir senaryo 1'i kaçırıp kaçırmadığımı bilmek istiyorum. data.originalFiles [0] ['size']? 'true': 'false' (1) 0, null, undefined değerleri için false döndürür
Ganesh Arulanantham

49

Sen içermelidir jquery.fileupload-process.js ve jquery.fileupload-validate.js o işi yapmak için.


4
Bu daha iyi bir cevap gibi görünüyor. ;)
thasmo

8
Komut dosyalarını yükleme sıranız, hata mesajının görünmesi için önemlidir: tmpl.min.js> jquery.ui.widget.js> jquery.iframe-transport.js> jquery.fileupload.js> jquery.fileupload-ui.js> jquery.fileupload-process.js> jquery.fileupload-validate.js
a11r

3
Sorun aynı, biraz çalışma örneği verebilir misiniz lütfen?
Vlatko

3
Ben de aynı sorunu yaşıyorum. JS dosyalarım tam olarak açıklanan sırada, ancak yine de hem normal ifadeye göre kabul edilmeyen hem de dosya boyutu sınırını büyük ölçüde aşan dosyaları yükleyebilirim. Ben jQuery 1.11.1 ile son FileUpload sürümünü, 9.10.5 kullanıyorum
Bay Pablo

3
Tüm komut dosyaları doğru sırada olsa bile benim için de çalışmıyor.
BadHorsie

10

Daha önceki bir cevapta önerildiği gibi, iki ek dosya eklememiz gerekiyor - jquery.fileupload-process.jsve sonra jquery.fileupload-validate.jsbir dosya eklerken bazı ek ajax çağrıları yapmam gerektiğinden, fileuploadaddbu çağrıları gerçekleştirmek için etkinliğe abone oluyorum . Böyle bir kullanımla ilgili olarak, bu eklentinin yazarı aşağıdakileri önerdi:

Lütfen buraya bir göz atın: https://github.com/blueimp/jQuery-File-Upload/wiki/Options#wiki-callback-options

JQuery Dosya Yükleme UI sürümüne göre geri arama ayarlarını korumak için bind (veya jQuery 1.7+ yöntemiyle) yöntemiyle ek olay dinleyicileri eklemek tercih edilen seçenektir.

Alternatif olarak, işlemi kendi geri aramanızda da başlatabilirsiniz, örneğin: https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.fileupload-process.js#L50

Önerilen iki seçeneğin kombinasyonunu kullanarak, aşağıdaki kod benim için mükemmel çalışıyor

$fileInput.fileupload({
    url: 'upload_url',
    type: 'POST',
    dataType: 'json',
    autoUpload: false,
    disableValidation: false,
    maxFileSize: 1024 * 1024,
    messages: {
        maxFileSize: 'File exceeds maximum allowed size of 1MB',
    }
});

$fileInput.on('fileuploadadd', function(evt, data) {
    var $this = $(this);
    var validation = data.process(function () {
        return $this.fileupload('process', data);
    });

    validation.done(function() {
        makeAjaxCall('some_other_url', { fileName: data.files[0].name, fileSizeInBytes: data.files[0].size })
            .done(function(resp) {
                data.formData = data.formData || {};
                data.formData.someData = resp.SomeData;
                data.submit();
        });
    });
    validation.fail(function(data) {
        console.log('Upload error: ' + data.files[0].error);
    });
});

1
Amith, bunu denedim ve şu hatayı aldım:Uncaught Error: cannot call methods on fileupload prior to initialization; attempted to call method 'process'
TheVillageIdiot

1
Neredeyse her zaman .fileupload()uygun zamanda çağrılmadığı anlamına gelir . Kodu görmeden teşhis etmek neredeyse imkansızdır. Yeni bir soru açmanızı ve ilgili kodu, belki bir jsfiddle olarak göndermenizi öneririm.
Amith George

@TheVillageIdiot $ fileInput.fileupload bildirimi içinde 'fileuploadadd' mantığını mı kurmaya çalışıyorsunuz? Amith'in örneğini şöyle bir şeyin içine katlamaya çalışırken benzer bir hata yaşadım: $('#fileupload').fileupload({ blah : blah, blah : blah, }) $fileInput.on('fileuploadadd', function(evt, data) { var $this = $(this); var validation = data.process(function () { return $this.fileupload('process', data); }); ... Düşündüğümde açıktı, ama henüz açıklamayı bitirmediğim bir şeyin içindeki mantığı tanımlamaya çalışıyordum.
jdhurst

Bu hatayı alıyorum: Yakalanmamış Referans Hatası: makeAjaxCall
rida mukhtar

8

Bu benim için firefox'ta çalışıyor

$('#fileupload').fileupload({

    dataType: 'json',
    //acceptFileTypes: /(\.|\/)(xml|pdf)$/i,
    //maxFileSize: 15000000,

    add: function (e, data) {
        var uploadErrors = [];

        var acceptFileTypes = /\/(pdf|xml)$/i;
        if(data.originalFiles[0]['type'].length && !acceptFileTypes.test(data.originalFiles[0]['type'])) {
            uploadErrors.push('File type not accepted');
        }

        console.log(data.originalFiles[0]['size']) ;
        if (data.originalFiles[0]['size'] > 5000000) {
            uploadErrors.push('Filesize too big');
        }
        if(uploadErrors.length > 0) {
            alert(uploadErrors.join("\n"));
        } else {
            data.context = $('<p/>').text('Uploading...').appendTo(document.body);
            data.submit();
        }

    },
    done: function (e, data) {
        data.context.text('Success!.');
    }
});

3
Stack Overflow'a hoş geldiniz! Lütfen bu cevabı İngilizce olacak şekilde yeniden yazabilir misiniz? Otomatik çevirmenlerin bazen anlatmayı zorlaştırabileceğini biliyorum, ancak burada kullandığımız tek (programlamayan) dil İngilizce.
Pops

15
Dikkat edin, nasatome'ın "Bu benim için işe yarıyor: Firefox'ta doğru" dediğini anlayabilmek için kurnaz bir dilbilimci olmanıza gerek yok. Yükleme hatası "dosya boyutu çok büyük". Ben Avustralyalıyım ve İngilizce konuşarak büyüdüm ama sanırım belli bir İngilizce konuşma tavrı var. "İngilizce burada kullandığımız tek dildir" doğru değil. Buradaki insanlar birçok farklı dil kullanıyor. Bununla birlikte, bu sitenin politikası İngilizce soru ve cevaplara sahip olmaktır.
Tim Ogilvy

3

"jquery.fileupload-ui.js" adlı dosyayı açın, kodu şu şekilde göreceksiniz:

 $.widget('blueimp.fileupload', $.blueimp.fileupload, {

    options: {
        // By default, files added to the widget are uploaded as soon
        // as the user clicks on the start buttons. To enable automatic
        // uploads, set the following option to true:
        acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
        autoUpload: false,
        // The ID of the upload template:
        uploadTemplateId: 'template-upload',
        // The ID of the download template:
        downloadTemplateId: 'template-download',
        。。。。

yalnızca bir satır kodu ekleyin --- yeni "acceptFileTypes" özelliği, şunun gibi:

 options: {
        // By default, files added to the widget are uploaded as soon
        // as the user clicks on the start buttons. To enable automatic
        // uploads, set the following option to true:
        **acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,**
        autoUpload: false,
        // The ID of the upload template:
        uploadTemplateId: 'template-upload',
        // The ID of the download template:
        downloadTemplateId: 'template-d

şimdi her şeyin yolunda olduğunu göreceksiniz! ~ niteliği yanlış bir yerde alıyorsunuz.


Yardımcı olabilirseniz, bir eklentinin / kitaplığın çekirdek kodunu değiştirmek kötü bir fikirdir.
BadHorsie

3

Tüm eklenti JS'leri içe aktarılmışsa ve doğru sıradaysanız, ancak yine de sorun yaşıyorsanız, kendi "ekle" işleyicinizi belirtmeniz, normalde tetiklenecek olan * -validate.js eklentisinden birini zayıflatıyor gibi görünüyor data.process () çağırarak tüm doğrulamayı kapatın. Bu yüzden düzeltmek için "add" olay işleyicinizde şöyle bir şey yapın:

$('#whatever').fileupload({
...
add: function(e, data) {
   var $this = $(this);
   data.process(function() {
      return $this.fileupload('process', data);
   }).done(function(){
      //do success stuff
      data.submit(); <-- fire off the upload to the server
   }).fail(function() {
      alert(data.files[0].error);
   });
}
...
});

Sorunum çözüldü
fezfox

2

Kontrol Edilmiş / Geçerli örnek:

  • çoklu dosya girişi
  • bir veya MULTIPLE FILES yükleme için -$.grep() hatalı diziden dosyaları kaldırmak için
  • image ve audio biçimlendir
  • dizeden dinamik dosya türleri new RegExp()

Uyarı: acceptFileTypes.test()- gibi adio dosya için, mim türlerini kontrol edin .mp3öyle olacak audio/mpegdeğil sadece extenstion -. Tüm blueimp seçenekleri için: https://github.com/blueimp/jQuery-File-Upload/wiki/Options

$('input[type="file"]').each(function(i){

    // .form_files is my div/section of form for input file and progressbar
    var $progressbar = $(this).parents('.form_files:first').find('.progress-bar:first');

    var $image_format = 'jpg|jpeg|jpe|png|gif';
    var $audio_format = 'mp3|mpeg';
    var $all_formats = $image_format + '|' + $audio_format;

    var $image_size = 2;
    var $audio_size = 10;
    var mb = 1048576;

    $(this).fileupload({
        // ...
        singleFileUploads: false,   // << send all together, not single
        // ...
        add: function (e, data) {

            // array with all indexes of files with errors
            var error_uploads_indexes = [];

            // when add file - each file
            $.each(data.files, function(index, file) {

                // array for all errors
                var uploadErrors = [];


                // validate all formats first
                if($all_formats){

                    // check all formats first - before size
                    var acceptFileTypes = "(\.|\/)(" + $all_formats + ")$";
                    acceptFileTypes = new RegExp(acceptFileTypes, "i");

                    // when wrong format
                    if(data.files[index]['type'].length && !acceptFileTypes.test(data.files[index]['type'])) {
                        uploadErrors.push('Not an accepted file type');

                    }else{

                        // default size is image_size
                        var $my_size = $image_size;

                            // check audio format
                            var acceptFileTypes = "(\.|\/)(" + $audio_format + ")$";
                            acceptFileTypes = new RegExp(acceptFileTypes, "i");

                            // alert(data.files[index]['type']);
                            // alert(acceptFileTypes.test('audio/mpeg'));

                            // if is audio then size is audio_size
                            if(data.files[index]['type'].length && acceptFileTypes.test(data.files[index]['type'])) {
                                $my_size = $audio_size;
                            }

                        // check size
                        if(data.files[index]['size'] > $my_size * mb) {
                            uploadErrors.push('Filesize is too big');
                        };
                    };

                }; // << all_formats

                // when errors
                if(uploadErrors.length > 0) {
                    //  alert(uploadErrors.join("\n"));

                    // mark index of error file
                    error_uploads_indexes.push(index);
                    // alert error
                    alert(uploadErrors.join("\n"));

                };

            }); // << each


            // remove indexes (files) with error
            data.files = $.grep( data.files, function( n, i ) {
                return $.inArray(i, error_uploads_indexes) ==-1;
            });


            // if are files to upload
            if(data.files.length){
                // upload by ajax
                var jqXHR = data.submit().done(function (result, textStatus, jqXHR) {
                        //...
                     alert('done!') ;
                        // ...
                });
            } // 

        }, // << add
        progressall: function (e, data) {
            var progress = parseInt(data.loaded / data.total * 100, 10);
            $progressbar.css(
                'width',
                progress + '%'
                );
        }
    }); // << file_upload

    //          
}); // << each input file

1

Etkinlik ekle için yalnızca bir olay işleyicisi örneği. SingleFileUploads seçeneğinin etkinleştirildiğini varsayar (bu varsayılandır). Add / fileuploadadd olayına nasıl bağlanılacağıyla ilgili daha fazla jQuery File Upload belgesini okuyun. İçerisinde döngü hem vars kullanabilirsiniz bu veya dosyayı . Size özelliğini almaya bir örnek: bu ['size'] veya file.size .

    /**
     * Handles Add event
     */
    base.eventAdd = function(e, data) {

        var errs = [];
        var acceptFileTypes = /(\.|\/)(gif|jpe?g|png)$/i;
        var maxFileSize = 5000000;

        // Validate file
        $.each(data.files, function(index, file) {
            if (file.type.length && !acceptFileTypes.test(file.type)) {
                errs.push('Selected file "' + file.name + '" is not alloawed. Invalid file type.');
            }
            if (this['size'] > maxFileSize) {
                errs.push('Selected file "' + file.name + '" is too big, ' + parseInt(file.size / 1024 / 1024) + 'M.. File should be smaller than ' + parseInt(maxFileSize / 1024 / 1024) + 'M.');
            }
        });

        // Output errors or submit data
        if (errs.length > 0) {
            alert('An error occured. ' + errs.join(" "));
        } else {
            data.submit();
        }
    };

1

Bu benim için chrome'da çalıştı, jquery.fileupload.js sürümü 5.42.3

     add: function(e, data) {
        var uploadErrors = [];
        var ext = data.originalFiles[0].name.split('.').pop().toLowerCase();
        if($.inArray(ext, ['odt','docx']) == -1) {
            uploadErrors.push('Not an accepted file type');
        }
        if(data.originalFiles[0].size > (2*1024*1024)) {//2 MB
            uploadErrors.push('Filesize is too big');
        }
        if(uploadErrors.length > 0) {
            alert(uploadErrors.join("\n"));
        } else {
            data.submit();
        }
    },

1
Teşekkürler. 9.21'de de çalışıyor.
geca

1
.fileupload({
    add: function (e, data) { 
        var attachmentValue = 3 * 1000 * 1024;
        var totalNoOfFiles = data.originalFiles.length;
        for (i = 0; i < data.originalFiles.length; i++) {
            if (data.originalFiles[i]['size'] > attachmentValue) {
                $attachmentsList.find('.uploading').remove();
                $attachmentMessage.append("<li>" + 'Uploaded bytes exceeded the file size' + "</li>");
                $attachmentMessage.show().fadeOut(10000, function () {
                    $attachmentMessage.html('');
                });
                data.originalFiles.splice(i, 1);
            }
        }
        if (data.files[0]) {
            $attachmentsList
           .prepend('<li class="uploading" class="clearfix loading-content">' + data.files[0].name + '</li>');
        }
        data.submit();                    
    }

1

Sunucu tarafından yaygın olarak desteklenen biçimleri arayan birinin olması durumunda

3g2|3gp|3gp2|3gpp|aac|aaf|aca|accdb|accde|accdt|acx|adt|adts|afm|ai|aif|aifc|aiff|appcache|application|art|asd|asf|asi|asm|asr|asx|atom|au|avi|axs|bas|bcpio|bin|bmp|c|cab|calx|cat|cdf|chm|class|clp|cmx|cnf|cod|cpio|cpp|crd|crl|crt|csh|css|csv|cur|dcr|deploy|der|dib|dir|disco|dll|dllconfig|dlm|doc|docm|docx|dot|dotm|dotx|dsp|dtd|dvi|dvr-ms|dwf|dwp|dxr|eml|emz|eot|eps|esd|etx|evy|exe|execonfig|fdf|fif|fla|flr|flv|gif|gtar|gz|h|hdf|hdml|hhc|hhk|hhp|hlp|hqx|hta|htc|htm|html|htt|hxt|ico|ics|ief|iii|inf|ins|isp|IVF|jar|java|jck|jcz|jfif|jpb|jpe|jpeg|jpg|js|json|jsonld|jsx|latex|less|lit|lpk|lsf|lsx|lzh|m13|m14|m1v|m2ts|m3u|m4a|m4v|man|manifest|map|mdb|mdp|me|mht|mhtml|mid|midi|mix|mmf|mno|mny|mov|movie|mp2|mp3|mp4|mp4v|mpa|mpe|mpeg|mpg|mpp|mpv2|ms|msi|mso|mvb|mvc|nc|nsc|nws|ocx|oda|odc|ods|oga|ogg|ogv|one|onea|onepkg|onetmp|onetoc|onetoc2|osdx|otf|p10|p12|p7b|p7c|p7m|p7r|p7s|pbm|pcx|pcz|pdf|pfb|pfm|pfx|pgm|pko|pma|pmc|pml|pmr|pmw|png|pnm|pnz|pot|potm|potx|ppam|ppm|pps|ppsm|ppsx|ppt|pptm|pptx|prf|prm|prx|ps|psd|psm|psp|pub|qt|qtl|qxd|ra|ram|rar|ras|rf|rgb|rm|rmi|roff|rpm|rtf|rtx|scd|sct|sea|setpay|setreg|sgml|sh|shar|sit|sldm|sldx|smd|smi|smx|smz|snd|snp|spc|spl|spx|src|ssm|sst|stl|sv4cpio|sv4crc|svg|svgz|swf|t|tar|tcl|tex|texi|texinfo|tgz|thmx|thn|tif|tiff|toc|tr|trm|ts|tsv|ttf|tts|txt|u32|uls|ustar|vbs|vcf|vcs|vdx|vml|vsd|vss|vst|vsto|vsw|vsx|vtx|wav|wax|wbmp|wcm|wdb|webm|wks|wm|wma|wmd|wmf|wml|wmlc|wmls|wmlsc|wmp|wmv|wmx|wmz|woff|woff2|wps|wri|wrl|wrz|wsdl|wtv|wvx|x|xaf|xaml|xap|xbap|xbm|xdr|xht|xhtml|xla|xlam|xlc|xlm|xls|xlsb|xlsm|xlsx|xlt|xltm|xltx|xlw|xml|xof|xpm|xps|xsd|xsf|xsl|xslt|xsn|xtp|xwd|z|zip

0

Ayrıca aşağıdaki gibi ekstra bir işlev de kullanabilirsiniz:

    function checkFileType(filename, typeRegEx) {
        if (filename.length < 4 || typeRegEx.length < 1) return false;
        var filenameParts = filename.split('.');
        if (filenameParts.length < 2) return false;
        var fileExtension = filenameParts[filenameParts.length - 1];
        return typeRegEx.test('.' + fileExtension);
    }

0

Sen içermelidir jquery.fileupload-process.js ve jquery.fileupload-validate.js o işi yapmak için.

Sonra...

$(this).fileupload({
    // ...
    processfail: function (e, data) {
        data.files.forEach(function(file){
            if (file.error) {
                self.$errorMessage.html(file.error);
                return false;
            }
        });
    },
//...
}

processfail callback, bir doğrulama başarısız olduktan sonra başlatılır.


0
  • Dosya türünü kontrol etmek için dosya uzantısını da kullanabilirsiniz.
  • Daha basit bir yol, aşağıda verilen bir şeyi eklemek olacaktır:

    add : function (e,data){
       var extension = data.originalFiles[0].name.substr( 
       (data.originalFiles[0].name.lastIndexOf('.') +1) );
                switch(extension){
                    case 'csv':
                    case 'xls':
                    case 'xlsx':
                        data.url = <Your URL>; 
                        data.submit();
                    break;
                    default:
                        alert("File type not accepted");
                    break;
                }
      }
    

0

Birden fazla dosyanız varsa, dosya formatlarının her birini doğrulamak için bir döngü kullanırsınız, bunun gibi bir şey

add: function(e, data) {
        data.url = 'xx/';
        var uploadErrors = [];
         var acceptFileTypes = /^image\/(gif|jpe?g|png)$/i;
        console.log(data.originalFiles);
        for (var i = 0; i < data.originalFiles.length; i++) {
            if(data.originalFiles[i]['type'].length && !acceptFileTypes.test(data.originalFiles[i]['type'])) {
                    uploadErrors.push('Not an accepted file type');
                    data.originalFiles
                }
                if(data.originalFiles[i]['size'].length && data.originalFiles[i]['size'] > 5000000) {
                    uploadErrors.push('Filesize is too big');
                }
                if(uploadErrors.length > 0) {

                      alert(uploadErrors.join("\n"));
                }
        }
        data.submit();
      },
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.