Administrator
2022-09-14 58d006e05dcf2a20d0ec5367dd03d66a61db6849
提交 | 用户 | 时间
58d006 1 /*
A 2  * jQuery File Upload Validation Plugin 1.1.1
3  * https://github.com/blueimp/jQuery-File-Upload
4  *
5  * Copyright 2013, Sebastian Tschan
6  * https://blueimp.net
7  *
8  * Licensed under the MIT license:
9  * http://www.opensource.org/licenses/MIT
10  */
11
12 /*jslint nomen: true, unparam: true, regexp: true */
13 /*global define, window */
14
15 (function (factory) {
16     'use strict';
17     if (typeof define === 'function' && define.amd) {
18         // Register as an anonymous AMD module:
19         define([
20             'jquery',
21             './jquery.fileupload-process'
22         ], factory);
23     } else {
24         // Browser globals:
25         factory(
26             window.jQuery
27         );
28     }
29 }(function ($) {
30     'use strict';
31
32     // Append to the default processQueue:
33     $.blueimp.fileupload.prototype.options.processQueue.push(
34         {
35             action: 'validate',
36             // Always trigger this action,
37             // even if the previous action was rejected: 
38             always: true,
39             // Options taken from the global options map:
40             acceptFileTypes: '@',
41             maxFileSize: '@',
42             minFileSize: '@',
43             maxNumberOfFiles: '@',
44             disabled: '@disableValidation'
45         }
46     );
47
48     // The File Upload Validation plugin extends the fileupload widget
49     // with file validation functionality:
50     $.widget('blueimp.fileupload', $.blueimp.fileupload, {
51
52         options: {
53             /*
54             // The regular expression for allowed file types, matches
55             // against either file type or file name:
56             acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
57             // The maximum allowed file size in bytes:
58             maxFileSize: 10000000, // 10 MB
59             // The minimum allowed file size in bytes:
60             minFileSize: undefined, // No minimal file size
61             // The limit of files to be uploaded:
62             maxNumberOfFiles: 10,
63             */
64
65             // Function returning the current number of files,
66             // has to be overriden for maxNumberOfFiles validation:
67             getNumberOfFiles: $.noop,
68
69             // Error and info messages:
70             messages: {
71                 maxNumberOfFiles: 'Maximum number of files exceeded',
72                 acceptFileTypes: 'File type not allowed',
73                 maxFileSize: 'File is too large',
74                 minFileSize: 'File is too small'
75             }
76         },
77
78         processActions: {
79
80             validate: function (data, options) {
81                 if (options.disabled) {
82                     return data;
83                 }
84                 var dfd = $.Deferred(),
85                     settings = this.options,
86                     file = data.files[data.index];
87                 if ($.type(options.maxNumberOfFiles) === 'number' &&
88                         (settings.getNumberOfFiles() || 0) + data.files.length >
89                             options.maxNumberOfFiles) {
90                     file.error = settings.i18n('maxNumberOfFiles');
91                 } else if (options.acceptFileTypes &&
92                         !(options.acceptFileTypes.test(file.type) ||
93                         options.acceptFileTypes.test(file.name))) {
94                     file.error = settings.i18n('acceptFileTypes');
95                 } else if (options.maxFileSize && file.size >
96                         options.maxFileSize) {
97                     file.error = settings.i18n('maxFileSize');
98                 } else if ($.type(file.size) === 'number' &&
99                         file.size < options.minFileSize) {
100                     file.error = settings.i18n('minFileSize');
101                 } else {
102                     delete file.error;
103                 }
104                 if (file.error || data.files.error) {
105                     data.files.error = true;
106                     dfd.rejectWith(this, [data]);
107                 } else {
108                     dfd.resolveWith(this, [data]);
109                 }
110                 return dfd.promise();
111             }
112
113         }
114
115     });
116
117 }));