return errors;
}
+// --- Проверка суммарного размера всех файлов (лимит 2 ГБ) ---
+var MAX_TOTAL_FILE_SIZE = 2.5 * 1024 * 1024 * 1024; // 2.5 ГБ
+
+function validateTotalFileSize(yiiform) {
+ var totalSize = 0;
+ yiiform.find('input[type="file"]').each(function () {
+ var cached = fileCache.get(this);
+ if (cached && cached.length > 0) {
+ for (var i = 0; i < cached.length; i++) {
+ totalSize += cached[i].size;
+ }
+ } else if (this.files && this.files.length > 0) {
+ for (var i = 0; i < this.files.length; i++) {
+ totalSize += this.files[i].size;
+ }
+ }
+ });
+
+ if (totalSize > MAX_TOTAL_FILE_SIZE) {
+ var totalMb = (totalSize / 1024 / 1024).toFixed(0);
+ var limitMb = (MAX_TOTAL_FILE_SIZE / 1024 / 1024).toFixed(0);
+ return ['Суммарный размер файлов (' + totalMb + ' МБ) превышает допустимый лимит ' + limitMb + ' МБ. Уменьшите количество или размер файлов.'];
+ }
+ return [];
+}
+
// --- Отправка формы через XHR + FormData (файлы из кэша, не с диска) ---
function submitFormWithXHR(yiiform) {
// [10] Если идёт кэширование — ждём и повторяем
alert(allErrors.join('\n'));
} else {
- // Проверяем кэш файлов и отправляем через XHR
+ // Проверяем кэш файлов и суммарный размер, затем отправляем через XHR
var cacheErrors = validateFileCache(yiiform);
- if (cacheErrors.length > 0) {
+ var sizeErrors = validateTotalFileSize(yiiform);
+ var preSubmitErrors = cacheErrors.concat(sizeErrors);
+ if (preSubmitErrors.length > 0) {
if (!errors['__common']) errors = {'__common': []};
errors['__common'] = errors['__common'] || [];
- errors['__common'] = errors['__common'].concat(cacheErrors);
+ errors['__common'] = errors['__common'].concat(preSubmitErrors);
renderErrors(errors);
- alert(cacheErrors.join('\n'));
+ alert(preSubmitErrors.join('\n'));
} else {
submitFormWithXHR(yiiform);
}