maxFileSize và acceptFileTypes trong plugin tải lên tệp blueimp không hoạt động. Tại sao?


85

Tôi đang sử dụng plugin tải lên tệp Blueimp jQuery để tải tệp lên.

Tôi không gặp vấn đề gì khi tải lên nhưng tùy chọn maxFileSizeacceptFileTypeskhông hoạt động.

Đây là mã của tôi:

$(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 + '%');
        }
    });
});

Xin chào, tôi đang cố gắng triển khai mã này để tải tệp lên nhưng gặp lỗi thông báo Lỗi tệp tải lên: Số byte tải lên vượt quá kích thước tệp. Bạn có thể vui lòng đề xuất nguyên nhân là gì không?
Jay Maharjan

2
@JayMaharjan Bạn có chắc rằng maxFileSize được định cấu hình đúng không?
YoBre

1
Sau khi thực hiện cấu hình thích hợp trong php.ini, bây giờ tôi có thể tải lên các tệp lớn. Cảm ơn sự giúp đỡ của bạn. :)
Jay Maharjan

Đối với trường hợp của tôi, gif đã được thay đổi kích thước và chuyển đổi thành png, và sau đó lọc gif rõ ràng không thành công. Và kỳ lạ thay, nó bắt đầu tự hoạt động ngay khi tôi tìm ra chuyện gì đang xảy ra, tôi đã kiểm tra lại xem mình đã làm gì đó với thư viện nhưng không có gì, tất cả những gì tôi đặt là nhật ký bảng điều khiển, tôi đã gỡ bỏ và vẫn hoạt động. Đăng để điều này có thể giúp ai đó.
Zia Ul Rehman Mughal

Câu trả lời:


135

Gặp phải vấn đề tương tự và anh chàng blueimp nói " maxFileSize và acceptFileTypes chỉ được hỗ trợ bởi phiên bản giao diện người dùng " và đã cung cấp một liên kết (bị hỏng) để kết hợp các phương thức _validate và _hasError.

Vì vậy, nếu không biết cách kết hợp các phương pháp đó mà không làm rối tập lệnh, tôi đã viết hàm nhỏ này. Nó dường như làm việc cho tôi.

Chỉ cần thêm cái này

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();
        }
},

ở đầu các tùy chọn .fileupload như được hiển thị trong mã của bạn ở đây

$(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 + '%');
        }
    });
});

Bạn sẽ nhận thấy rằng tôi đã thêm một chức năng kích thước tệp vào đó vì chức năng đó cũng sẽ chỉ hoạt động trong phiên bản giao diện người dùng.

Đã cập nhật để khắc phục sự cố vừa qua do @lopsided đề xuất: Đã thêm data.originalFiles[0]['type'].lengthdata.originalFiles[0]['size'].lengthtrong truy vấn để đảm bảo chúng tồn tại và không trống trước khi kiểm tra lỗi. Nếu chúng không tồn tại, không có lỗi nào được hiển thị và nó sẽ chỉ dựa vào kiểm tra lỗi phía máy chủ của bạn.


Điều này thực sự hữu ích. Tuy nhiên, cần lưu ý rằng data.originalFiles[0]['type']trống khi tải lên từ trình duyệt không hỗ trợ API tệp. Đây là trường hợp trên điện thoại Android của tôi. Những gì tôi đã làm là chuyển nó nếu giá trị này không có sẵn và sau đó dự phòng để xác thực kiểu mime phía máy chủ. Nếu không, bạn không bao giờ vượt qua các acceptFileTypes.testdòng
lệch

@lopsided thật kỳ lạ, tôi nhận được giá trị cho data.originalFiles [0] ['type'] và ['size'] trên điện thoại Android của mình và nó vượt qua cả hai bài kiểm tra. Tôi thực sự đang gặp sự cố với điện thoại của mình trong đó mọi thứ dường như hoạt động mà không có lỗi nhưng tệp không được tải lên. Không có vấn đề ở bất kỳ nơi nào khác, chỉ là Android.
PaulMrG

8
Tôi nghĩ rằng điều kiện 'data.originalFiles [0] [' size ']. Length' không được dùng nữa, do đó nó luôn trả về false.
kkocabiyik

5
Sử dụng data.files [0] ['size'] và data.files [0] ['type']
Jose

2
Sử dụng không có 'length' (data.originalFiles [0] ['size'] && data.originalFiles [0] ['size']> 500000)? 'true': 'false' hoạt động tốt, nhưng tôi muốn biết liệu mình có thiếu trường hợp nào không 1. data.originalFiles [0] ['size']? 'true': 'false' (1) trả về false cho các giá trị 0, null, undefined
Ganesh Arulanantham

49

Bạn nên bao gồm jquery.fileupload-process.jsjquery.fileupload-validate.js để làm cho nó hoạt động.


4
Đây có vẻ là câu trả lời tốt hơn. ;)
thasmo

8
Thứ tự bạn tải tập lệnh là rất quan trọng để thông báo lỗi xuất hiện: 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
Vấn đề là giống nhau, bạn có thể cung cấp một số ví dụ làm việc xin vui lòng?
Vlatko

3
Tôi gặp vấn đề tương tự. Các tệp JS của tôi có thứ tự chính xác được mô tả, nhưng tôi vẫn có thể tải lên các tệp vừa không được chấp nhận theo regex, vừa vượt quá giới hạn kích thước tệp hàng loạt. Tôi đang sử dụng phiên bản FileUpload mới nhất, 9.10.5 với jQuery 1.11.1
Mr Pablo

3
Nó cũng không hoạt động với tôi, ngay cả với tất cả các tập lệnh được bao gồm theo đúng thứ tự.
BadHorsie 13/10/15

10

Như đã đề xuất trong câu trả lời trước đó, chúng tôi cần bao gồm hai tệp bổ sung - jquery.fileupload-process.jsvà sau đó jquery.fileupload-validate.jsTuy nhiên, vì tôi cần thực hiện một số lệnh gọi ajax bổ sung trong khi thêm tệp, nên tôi đang đăng ký fileuploadaddsự kiện để thực hiện các lệnh gọi đó. Về cách sử dụng như vậy, tác giả của plugin này đã đề xuất những điều sau

Vui lòng xem tại đây: https://github.com/blueimp/jQuery-File-Upload/wiki/Options#wiki-callback-options

Thêm trình xử lý sự kiện bổ sung thông qua phương thức bind (hoặc trên phương thức với jQuery 1.7+) là tùy chọn ưu tiên để duy trì cài đặt gọi lại bằng phiên bản giao diện người dùng tải lên tệp jQuery.

Ngoài ra, bạn cũng có thể chỉ cần bắt đầu xử lý trong lệnh gọi lại của riêng mình, như sau: https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.fileupload-process.js#L50

Sử dụng kết hợp hai tùy chọn được đề xuất, đoạn mã sau hoạt động hoàn hảo đối với tôi

$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, tôi đã thử điều này và gặp lỗi sau:Uncaught Error: cannot call methods on fileupload prior to initialization; attempted to call method 'process'
TheVillageIdiot

1
Nó gần như luôn luôn có nghĩa là nó .fileupload()không được gọi vào thời điểm thích hợp. Nếu không nhìn thấy mã, hầu như không thể chẩn đoán được. Tôi khuyên bạn nên mở một câu hỏi mới và đăng mã có liên quan, có thể dưới dạng jsfiddle.
Amith George

@TheVillageIdiot Bạn đang cố gắng thiết lập logic cho 'fileuploadadd' bên trong khai báo $ fileInput.fileupload? Tôi đã gặp một lỗi tương tự khi cố gắng gấp ví dụ của Amith vào bên trong một cái gì đó như thế này: $('#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); }); ... Rõ ràng là khi tôi nghĩ về nó, nhưng tôi đang cố gắng xác định logic bên trong một thứ mà tôi chưa khai báo xong.
jdhurst

tôi đang nhận được lỗi này: của router ReferenceError: makeAjaxCall
rida Mukhtar

8

Điều này phù hợp với tôi trong firefox

$('#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
Chào mừng bạn đến với Stack Overflow! Bạn có thể vui lòng viết lại câu trả lời này để nó bằng tiếng Anh không? Tôi biết những người dịch tự động đôi khi có thể khiến bạn khó phân biệt, nhưng tiếng Anh là ngôn ngữ (không phải lập trình) duy nhất mà chúng tôi sử dụng ở đây.
Pops

15
phiền bạn, bạn không cần phải là một nhà ngôn ngữ học tinh ranh để có thể phát hiện ra rằng kẻ ngốc đang nói "Điều này hiệu quả với tôi: nó chính xác trong firefox." Lỗi tải lên là "kích thước tệp quá lớn". Tôi là người Úc và tôi lớn lên nói tiếng Anh, nhưng tôi nghĩ rằng có một thái độ nói tiếng Anh nhất định. "Tiếng Anh là ngôn ngữ duy nhất chúng tôi sử dụng ở đây" là không đúng. Người dân ở đây sử dụng nhiều ngôn ngữ khác nhau. Tuy nhiên, chính sách của trang web này là có các câu hỏi và câu trả lời bằng tiếng Anh.
Tim Ogilvy

3

mở tệp có tên "jquery.fileupload-ui.js", bạn sẽ thấy đoạn mã như sau:

 $.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',
        。。。。

chỉ cần thêm một mã dòng --- thuộc tính mới "acceptFileTypes", như thế này:

 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

bây giờ bạn sẽ thấy mọi thứ đều ổn! ~ bạn chỉ lấy thuộc tính sai chỗ.


Bạn nên sửa đổi mã lõi của một plugin / thư viện nếu bạn có thể giúp được.
BadHorsie

3

Nếu bạn đã nhập tất cả plugin JS và theo đúng thứ tự, nhưng bạn vẫn gặp sự cố, thì có vẻ như việc chỉ định trình xử lý "add" của riêng bạn sẽ giảm sức mạnh từ plugin * -validate.js, thường sẽ kích hoạt tắt tất cả xác thực bằng cách gọi data.process (). Vì vậy, để khắc phục nó chỉ cần làm một cái gì đó như sau trong trình xử lý sự kiện "thêm" của bạ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);
   });
}
...
});

Đã giải quyết vấn đề của tôi
fezfox

2

Ví dụ được kiểm tra / hợp lệ cho:

  • nhiều đầu vào tệp
  • để tải lên một hoặc NHIỀU LỌC - $.grep()để xóa tệp khỏi mảng có lỗi
  • imageaudiođịnh dạng
  • các loại tệp động từ chuỗi của new RegExp()

Lưu ý: acceptFileTypes.test()- kiểm tra các loại kịch câm, đối với tệp adio .mp3sẽ giống như vậy audio/mpeg- không chỉ mở rộng. Đối với tất cả các tùy chọn blueimp: 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

Chỉ là một ví dụ về trình xử lý sự kiện cho Thêm sự kiện. Giả sử rằng tùy chọn singleFileUploads được kích hoạt (là tùy chọn mặc định). Đọc thêm tài liệu Tải lên tệp jQuery cách liên kết với sự kiện add / fileuploadadd. Vòng lặp bên trong bạn có thể sử dụng cả vars this hoặc file . Ví dụ về nhận thuộc tính kích thước: this ['size'] hoặc 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

Điều này làm việc cho tôi trong chrome, phiên bản jquery.fileupload.js là 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
Cảm ơn. Hoạt động cũng trên 9.21.
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

Trong trường hợp bất kỳ ai đang tìm kiếm các định dạng thường được máy chủ hỗ trợ

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

Bạn cũng có thể sử dụng một chức năng bổ sung như:

    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

Bạn nên bao gồm jquery.fileupload-process.jsjquery.fileupload-validate.js để làm cho nó hoạt động.

Sau đó...

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

gọi lại processfail được khởi chạy sau khi xác thực không thành công.


0
  • Bạn cũng có thể sử dụng phần mở rộng tệp để kiểm tra loại tệp.
  • Cách đơn giản hơn sẽ là làm một cái gì đó như được đưa ra bên dưới bên trong thêm:

    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

nếu bạn có nhiều tệp, bạn sử dụng một vòng lặp để xác minh từng định dạng tệp, giống như thế này

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();
      },
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.