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,
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'].length
và data.originalFiles[0]['size'].length
trong 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.